PHP Curl,在 application/json 中请求数据返回

Posted

技术标签:

【中文标题】PHP Curl,在 application/json 中请求数据返回【英文标题】:PHP Curl, Request data return in application/json 【发布时间】:2014-09-16 08:09:30 【问题描述】:

我正在尝试从 API 中获取一些数据,现在我将其作为 XML 取回。

我更喜欢它作为 JSON,API 文档说它在 JSON 和 XML 中都可用。

文档说...

API 目前支持两种响应格式:XML 和 JSON

您可以使用请求中的 HTTP Accept 标头指定所需的格式:

接受:应用程序/xml 接受:application/json

那么如何在我的 php 代码中生成 applixation/json 的 Accept Header?

我现在的 PHP 代码是:

header('Content-Type: application/json');

$endpoint = "http://api.api.com";

//  Initiate curl
$ch = curl_init();

// Set The Response Format to Json
curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json'));

// Disable SSL verification
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

// Will return the response, if false it print the response
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// Set the url
curl_setopt($ch, CURLOPT_URL,$endpoint);

// Execute
$result=curl_exec($ch);

// Closing
curl_close($ch);

echo $result;

结果的回显只是返回 XML 格式的数据。

提前致谢。

【问题讨论】:

文档说Accept,但你在CURLOPT_HTTPHEADER中使用Content-Type 使用 curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept: application/json')); 【参考方案1】:

您应该修改在请求中设置 HTTP 标头的代码。您没有指定 Accept 标头

curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept: application/json'));

这应该将 HTTP 请求发送到 API 的 URL,其中包含您希望以特定格式获取响应的信息。

编辑(以防这可能对某人有用):

Accept 标头是请求标头,它指定响应正文的可接受类型 Content-Type 标头既是请求标头又是响应标头,它指定了请求/响应正文的格式

HTTP 请求的示例可能如下所示(通常,请求仅包含标头部分):

GET /index.html HTTP/1.1
Host: www.example.com
Accept: application/json

响应可能看起来像这样:

HTTP/1.1 200 OK
Date: Mon, 23 May 2005 22:38:34 GMT
Server: Apache/1.3.3.7 (Unix) (Red-Hat/Linux)
Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT
Content-Type: application/json; charset=UTF-8
Content-Length: 24


    "hello": "world"

【讨论】:

嗨@Tomas 感谢您的回答。但是,即使进行了这种更改,我仍然可以恢复 XML 数据。不太确定我还需要更改什么 @StuBlackett 我会查看 cURL 发送的 HTTP 请求,这很简单,只需在 curl_exec() 调用之前添加 curl_setopt($ch, CURLINFO_HEADER_OUT, true); 并在 curl_exec 调用之后运行 echo curl_getinfo($ch, CURLINFO_HEADER_OUT); 即可打印输出HTTP 标头。我尝试了您的 PHP 代码并在请求中获得了 Accept 标头,因此一切看起来都很正常。我无权访问 API,所以我认为我无法进一步调试。 API 文档可以在线获取吗? 如果 API 返回 XML 格式,这样做 curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept: application/json'));将 XML 响应转换为 JSON 并返回给用户,否则 API 响应为空?

以上是关于PHP Curl,在 application/json 中请求数据返回的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Linux 上的 PHP 中启用 cURL 支持

在 php 中管理 curl 输出

解析php中curl

如何使用curl在php中调试get请求

php curl get 下载远程zip文件保存在本地例子

如何在php中获取curl请求的请求头信息及相应头信息