Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过PHP将JSON数据发布到API_Php_Json_Api_Curl - Fatal编程技术网

通过PHP将JSON数据发布到API

通过PHP将JSON数据发布到API,php,json,api,curl,Php,Json,Api,Curl,我需要将JSON集成到PHP中,更具体地说,我需要在我们网站的PHP页面上发布一些信息,以启动一个API请求,然后将信息发送给我。我发送的信息围绕着登录信息,我正在努力找出如何发送这些信息 这是我需要发布的信息: POST /user/?action=login HTTP/1.1 Host: api.interlinkexpress.com Content-Type: application/json Accept: application/json Authorization: Basic R

我需要将JSON集成到PHP中,更具体地说,我需要在我们网站的PHP页面上发布一些信息,以启动一个API请求,然后将信息发送给我。我发送的信息围绕着登录信息,我正在努力找出如何发送这些信息

这是我需要发布的信息:

POST /user/?action=login HTTP/1.1
Host: api.interlinkexpress.com
Content-Type: application/json
Accept: application/json
Authorization: Basic RFNNSVRIOk1ZUEFTU1dE
GEOClient: account/123456
Content-Length: 0
通过阅读本主题,我发现php cURL可能很有用,但是我的示例并没有包含我需要传递的所有信息。此外,我也不确定是否需要通过按钮传递:

      $data = array("username" => "TESTAPI", "password" => "APITEST");                                                                    
        $data_string = json_encode($data);                                                                                   

        $ch = curl_init('http://api.interlinkexpress.com');                                                                      
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");                                                                     
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);                                                                  
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);                                                                      
        curl_setopt($ch, CURLOPT_HTTPHEADER, array(                                                                          
        'Content-Type: application/json',                                                                                
        'Content-Length: ' . strlen($data_string))                                                                       
        );                                                                                                                   

        $result = curl_exec($ch);
在此问题上的任何帮助都将不胜感激。我刚刚接触JSON,只是短暂地了解了它

编辑:我想我要问的主要问题是如何将这些信息传递给PHP中的API

 POST /user/?action=login HTTP/1.1
 Host: api.interlinkexpress.com
 Content-Type: application/json
 Accept: application/json
 Authorization: Basic RFNNSVRIOk1ZUEFTU1dE (this is the login credentials)
 GEOClient: account/123456
 Content-Length: 0

如果你想要更强大的东西,你可以用一种更好的方式集成cURL

我不明白你通过按钮传递它到底是什么意思。你说的是PHP还是HTML/Javasript? 如果需要一个按钮,可以使用一个通过Javascript执行XMLHttpRequest的按钮,调用API(该API应返回应用程序/json内容类型),然后通过Javascript处理该结果

或者,您可以使用cURL调用API,获得结果,
json\u解码它

你应该更好地解释你想完成什么

[编辑]

好的,在澄清之后,我可以告诉您,您必须将API的参数与对API的HTTP调用的设置分开(正如您已经做的那样^^)

因此,将使API执行某些操作的参数是

  • 操作=登录
而其他所有的都是HTTP客户机的设置(cURL或Guzzle),它将执行对API url的调用

  • 方法=POST
  • 主机=api.interlinkexpress.com
  • 路径=/user/
  • 接受=应用程序/json
  • 内容类型=应用程序/json
  • 授权=基本
  • GEOClient=account/123456(这是API需要的特定标题吗?)
  • 内容长度=0
因此,这是不完整的,也没有经过测试,但应该给你一个路径来添加

    $data = array("action" => "login");

    $data_string = json_encode($data);

    $ch = curl_init(sprintf('%s/%s', 'http://api.interlinkexpress.com', 'user/');
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        'Content-Type: application/json',
        'Content-Length: ' . strlen($data_string)),
        'GEOClient: account/123456',
    );
    // I would suggest you to add the timeout
    curl_setopt($ch, CURLOPT_TIMEOUT, 30);
    curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY); // or set it to CURLAUTH_BASIC
    curl_setopt($ch, CURLOPT_USERPWD, sprintf('%s:%s', $data['username'],$data['password']));
    $status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);   //get status code

    $result = curl_exec($ch);
老实说,我不知道应该将JSON编码的数据发送到哪里。 通过这种方式,您将“操作”作为JSON数据发送,但我猜这是错误的。 也许您想将
$data\u字符串
作为特定字段的值传递?(如PHP Developer中所述的示例?)

在这方面下功夫,准确地理解哪些数据必须作为JSON传递,哪些不能


我希望能为您提供帮助并提出好的建议。

您的$data\u字符串的格式不是(field=value)。 无需做什么,只需将数组传递到POST


curl_setopt($ch,CURLOPT_POSTFIELDS,array('Data'=>$Data_string))

对不起,我没解释清楚。基本上,我们这边会有人点击一个按钮,它就会启动php页面,这样它就可以运行了。我是否需要通过按钮传递信息,或者信息可以通过仅在php页面上传递?如果必须传递的信息插入到按钮所在的调用页面中,则需要一些Javascript来收集这些信息并将其发送到API(在API的正确参数forma中)。或者,如果您有一个表单,您可以设置调用PHP页面的操作,通过方法POST或GET发送其字段。我不知道你的PHP页面是API还是API是你无法控制的。如果您需要使用按钮调用API,或者必须首先从PHP页面传递(然后使用cURL/Guzzle调用API),PHP页面包含API,但是它还包含更新系统某些部分的其他函数。我相信我可以在PHP页面上调用API,因为它将位于顶部。我想最简单的解释方法基本上是如何使用PHP:POST/user/?action=login HTTP/1.1 Host:API.interlinkexpress.com Content Type:application/json Accept:application/json Authorization:Basic RFNNSVRIOk1ZUEFTU1dE将此信息传递给APIGEOClient:account/123456 Content Length:0通常,API提供了调用它的接口,您不需要了解它的内部实现。因此,从按钮调用API是一回事。然后,如何在PHP页面中执行内部API函数是另一回事。如果我在本例中理解得很好,那么API就是PHP页面(您调用的主机[API.interlinkexpress.com/user/],带有您想要的服务的参数[action=login])。您担心什么?安全?您可以通过cURL、file_get_contents或fsockopen发送/获取,具体取决于服务器支持的内容。主要考虑的是安全性我知道我们的服务器支持cURL和file_get_contents