【问题标题】:Post JSON data to an API via PHP通过 PHP 将 JSON 数据发布到 API
【发布时间】:2014-08-27 10:04:45
【问题描述】:

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

【问题讨论】:

  • 您有什么顾虑?安全?您可以通过 cURLfile_get_contentsfsockopen 发送/获取,具体取决于服务器支持的内容。
  • 主要关注的是安全 我知道我们的服务器支持 cURL 和 file_get_contents

标签: php json api curl


【解决方案1】:

如果你想要更强大的东西,你可以使用Guzzle,它以更好的方式集成了 cURL。

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

或者你可以使用 cURL 来调用 API,得到结果,json_decode 它然后做你想做的事。

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

[编辑]

好的,经过澄清后,我可以告诉您,您必须将 API 的参数与 API 的 HTTP 调用设置分开(就像您已经做过的那样 ^^)。

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

  • 操作 = 登录

而所有其他人都在设置 HTTP 客户端(cURLGuzzle),它将执行对 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_string 作为特定字段的值传递? (就像 PHP 开发人员 中所述的示例?)

努力解决这个问题,并准确了解您必须以 JSON 形式传递哪些数据,而哪些不是。

希望对你有所帮助并提出好的建议。

【讨论】:

  • 对不起,我解释得不是很好。基本上我们这边的某个人会点击一个按钮,它会触发到 php 页面,以便它可以运行。我需要通过按钮传递信息还是可以通过仅在php页面上传递信息?
  • 如果您要传递的信息被插入到按钮所在的调用页面中,您需要一些Javascript来收集它们并将它们发送到API(以API的正确参数形式)。或者,如果您有一个表单,您可以设置 action 来调用 PHP 页面,通过 method POST 或 GET 发送其字段。如果您的 PHP 页面是 API,或者 API 是您无法控制的东西,我不知道。而如果你需要通过按钮调用API,或者你必须先从PHP页面传递(然后用cURL/Guzzle调用API)
  • PHP 页面包含 API,但它也包含更新我们系统某些部分的其他函数。我相信我可以在 PHP 页面上调用 API,因为它会位于顶部
  • 我想解释它的最简单方法基本上是如何使用 PHP:POST /user/?action=login HTTP/1.1 将此信息传递给 API 主机:api.interlinkexpress.com 内容-类型:application/json 接受:application/json 授权:基本 RFNNSVRIOk1ZUEFTU1dE GEOClient:account/123456 Content-Length:0
  • 通常API是提供一个接口来调用它的东西,你不需要知道它的内部实现。因此,从按钮调用 API 是一回事。那么如何在 PHP 页面中执行内部 API 函数是另一回事。如果我在这种情况下理解得很好,API IS PHP 页面(您调用的主机 [api.interlinkexpress.com/user/],带有您的服务参数)想要 [action=login])。
【解决方案2】:

您的 $data_string 格式不是 (field=value)。 无事可做,只需将数组传递给 POST。

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

【讨论】:

    猜你喜欢
    • 2021-10-01
    • 2016-11-06
    • 2014-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多