CURL php 不会接受 Accept-Language: fr 需要获取 JSON

Posted

技术标签:

【中文标题】CURL php 不会接受 Accept-Language: fr 需要获取 JSON【英文标题】:CURL php won't take Accept-Language: fr needed to get the JSON 【发布时间】:2013-12-28 05:13:30 【问题描述】:

我正在尝试从 api 获取一些 JSON 结果,但它总是返回此错误:

HTTP/1.1 400 Accept-Language HTTP header must be specified and be 'fr' or 'en' Cache-Control: no-cache Pragma: no-cache Expires: -1 Server: Microsoft-IIS/7.5 X-AspNet-Version: 4.0.30319 X-Powered-By: ASP.NET Date: Tue, 10 Dec 2013 15:31:59 GMT Content-Length: 0

我尝试输入我的标题:只有 Accept-Language: frAccept-Language: fr、fr-ca,以及您看到的所有标题数组以下。这是我的代码

$url = 'http://safire.afiexpertise.com/api/Courses?divisionId=2';

$header = array('Accept: application/json, text/javascript, */*; q=0.01','Accept-Language: fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3','Accept-Encoding: gzip, deflate','Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7','Content-Type: application/json; charset=utf-8','X-Requested-With: XMLHttpRequest','Pragma: no-cache','Cache-Control: no-cache');

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, $header);
$data = curl_exec($curl);
curl_close($curl);

print_r($data);

这是第一次有 api 询问我,我对 curl http 标头了解不多。我也试过这个标题http://php.net/manual/en/function.curl-setopt.php#Hcom78046,但没有结果。

感谢您帮助我和/或告诉我如何找到答案。

【问题讨论】:

【参考方案1】:

从手册到 curl_setopt http://www.php.net/curl_setopt

CURLOPT_HEADER TRUE to include the header in the output.

CURLOPT_HTTPHEADER An array of HTTP header fields to set, in the format array('Content-type: text/plain', 'Content-length: 100')

对于您的代码,您应该将 CURLOPT_HEADER 更改为 CURLOPT_HTTPHEADER

【讨论】:

新手错误,非常感谢。我绝对不会复制它^^【参考方案2】:

您必须确定是 curl 库(您的客户端)还是接收 API 的问题。

我经常使用两种工具来帮助调试从给定客户端实际发送的内容:

    http://httpkit.com/wiretap http://fiddler2.com/

在这种情况下,窃听更有可能对您有用,因为 fiddler 只有在客户端位于您的本地计算机(例如您的浏览器)上时才真正有用。

但是,使用 fiddler,您可以使用其 composer 工具来制作特定的请求,这样您就可以确保您从 API 中获得预期的响应。

或者,您可以ask curl to show you exactly what it's sending。不过,我之前和库有出入,所以我尝试使用库之外的工具。

【讨论】:

以上是关于CURL php 不会接受 Accept-Language: fr 需要获取 JSON的主要内容,如果未能解决你的问题,请参考以下文章

php curl采集,服务器gzip压缩返回数据怎么办

php用curl的post方法传递json包的时候,接受方是怎么获取的呢

PHP curl 模拟 请求 中我添加 Authorization 认证 但是这个认证内容我接受不到 没有开安全模式 何解?

CentOS PHP curl 无法协商一组可接受的安全参数

Apache 不会加载 php_curl.dll

使用 php curl 自动填充文本区域