我试图通过POST请求从api HERE获取数据到我的应用程序,它确实在error.log
中返回错误。
PHP消息:PHP警告:file_get_contents(' url_here')无法打开流:HTTP请求失败! HTTP / 1.1 406不可接受
这是我的代码:
$url = 'http://inventory.api.eciaauthorized.com/api/Search/Query';
$fields = array(
'CompanyID' => 'company_id',
'APIKey' => 'api_key_here',
'Queries' => array(
'SearchToken' => 'query_string_here',
),
'InStockOnly' => true,
'ExactMatch' => true,
'IsCrawler' => true
);
$postdata = http_build_query($fields);
$opts = array('http' =>
array(
'method' => 'POST',
'header' => 'Content-type: application/json ' . ' Accept: application/json',
'content' => $postdata
)
);
$context = stream_context_create($opts);
$result = file_get_contents($url, false, $context);
var_dump($result);
当我var_dump返回结果时:
假
我在这里缺少什么?请帮忙。感谢。
有回答的From This Question会抛出相同的错误。
$result = fopen($url, "r",true, $context);
有人建议用户 CURL ,所以我这样做是我的代码:
curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Accept: application/json',
'Content-Type: application/json'
));
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
curl_setopt($ch, CURLOPT_VERBOSE, true);
//execute post
$result['body'] = curl_exec($ch);
$result['headers'] = curl_getinfo($ch);
if(curl_error($ch))
{echo 'error:' . curl_error($ch);}
var_dump($ch);
curl_close($ch);
当我 var_dump 时,$ result返回
真
并且没有包含数据,并且在
上引发错误" HTTP / 1.1 406 Not Acceptable Cache-Control:no-cache Pragma:no-cache Expires:-1 Server:Microsoft-IIS / 8.0 X-AspNet-Version:4.0.30319 X-Powered-By :ASP.NET日期:2016年8月24日星期三06:43:54 GMT内容长度:0
我完成了对该错误的研究,发现标题不完整,但我正确地遵循了API文档。请帮忙。感谢。
这些在文档中:
ECIA Inventory API通过HTTP POST接收搜索请求。它支持JSON和XML请求和响应。请通过包含"内容类型"以及您的要求表明您想要使用哪种格式。并且"接受"标题设置为" application / json"或" application / xml"。
定义了请求和响应正文的格式 下面。 API的网址是: https://inventory.api.eciaauthorized.com/api/Search/Query