繁体   English   中英

通过PHP将JSON数据发布到API

[英]Post JSON data to an API via PHP

我需要将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

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

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

或者您可以使用cURL来调用API,获取结果, json_decode它并json_decode它执行您想要的操作。

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

[编辑]

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

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

  • action = login

所有其他人都设置为HTTP客户端( cURLGuzzle ),它将执行对API的URL的调用

  • method = POST
  • 主持人 = api.interlinkexpress.com
  • path = / user /
  • Accept = application / json
  • Content-Type = 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,而不是什么。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM