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: fr、Accept-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的post方法传递json包的时候,接受方是怎么获取的呢
PHP curl 模拟 请求 中我添加 Authorization 认证 但是这个认证内容我接受不到 没有开安全模式 何解?