通过PHP将JSON数据发布到API

时间:2014-08-27 10:04:46

标签: 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 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

2 个答案:

答案 0 :(得分:2)

如果您想要更强大的功能,可以使用Guzzle以更好的方式集成cURL。

我不明白通过按钮传递它是什么意思。您是在谈论PHP还是HTML / Javasript? 如果你想要一个按钮,你可以继续执行一个通过Javascript执行XMLHttpRequest的按钮,调用API(应该返回 application / json Content-Type),然后通过Javascript处理这个结果。 / p>

或者您可以使用cURL调用API,获取结果json_decode并使用它做您想做的事。

你应该更好地解释你想要完成的事情。

<强> [编辑]

好的,在澄清之后我可以告诉你,你必须将API的参数从HTTP调用的设置划分为API(正如你已经做过的那样^^)。

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

  • 操作 =登录

而所有其他人都设置了HTTP客户端( cURL Guzzle ),它们将执行对API的URL的调用

  • 方法 = POST
  • 主持人 = api.interlinkexpress.com
  • 路径 = / user /
  • 接受 = application / json
  • 内容类型 = application / 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编码数据。 这样你就可以将'action'作为JSON数据发送,但我猜这是错误的。 也许你想传递$data_string作为特定字段的值? (如 PHP开发者中所述的示例?)

开展此工作,并准确了解您必须传递哪些数据作为JSON,而不是什么。

我希望能帮助你并给出好的建议。

答案 1 :(得分:1)

您的$ data_string的格式不是(field = value)。 没有什么可以把数组传递给POST。

curl_setopt($ ch,CURLOPT_POSTFIELDS,array('Data'=&gt; $ data_string));