我一直在使用此代码获取带有帖子数据的文件获取内容但收到错误
Warning: file_get_contents(http://50.116.19.49/rest/user/login.json): failed to open
stream: HTTP request failed! HTTP/1.0 406 Not Acceptable: Unsupported request content type
application/x-www-form-urlencoded in C:\xampp\htdocs\post.php on line 20
我的代码是
<?php
$postdata = http_build_query(
array(
'var1' => 'myuser',
'var2' => 'pwd'
)
);
$opts = array('http' =>
array(
'method' => 'POST',
'header' => 'Content-type: application/x-www-form-urlencoded',
'content' => $postdata
)
);
$context = stream_context_create($opts);
$result = file_get_contents('http://50.116.19.49/rest/user/login.json', false,
$context);
?>
任何人都可以提前帮助。
答案 0 :(得分:2)
我们可以使用curl而不是函数file_get_contents($ request); 这是curl的代码:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$request);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 15);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
$xml_response = curl_exec($ch);
其中$ request是您的网址。
答案 1 :(得分:1)
这个特定的服务器,当你调用/login.json
时,希望在POST数据中看到JSON,所以你应该在代码中重写一些东西。
更改$postdata
构造:
$postdata = json_encode(array(
'var1' => 'myuser',
'var2' => 'pwd'
));
更改Content-Type
标题:
$opts = array('http' => array(
'method' => 'POST',
'header' => 'Content-type: application/json',
'content' => $postdata
));
答案 2 :(得分:0)
file_get_contents
在出错时返回FALSE
。错误表示HTTP响应的任何错误情况,例如来自400范围的HTTP状态代码,例如406 Not Acceptable: Unsupported request content type。
您可以将ignore_errors
HTTP context option设置为TRUE
来禁用“FALSE on Error”行为:
'ignore_errors' = TRUE,
然后,您将获得请求的响应正文作为错误情况的结果。
要获取状态代码本身,您可以使用special $http_response_header
variable。
有关这些设置以及如何解析响应标头的讨论,请参阅HEAD first with PHP Streams。但是,在您的情况下,响应正文可能已包含有关该问题的更多信息。
在您的特定问题中,您需要仔细检查服务器是否支持请求的编码。由于我不知道你的服务器,我不能说太多。对错误代码的引用可能会为您提供一些启示。您正在使用的内容类型:application / x-www-form-urlencoded 似乎存在问题。
例如,正如本网站上的其他聪明人告诉我的那样,该端点是Drupal。如果是这样,a similar question中建议使用以下内容:
您必须启用服务端点的
application/x-www-form-urlencoded
内容类型。执行以下操作:服务 - &gt;编辑资源 - &gt;选择标签“服务器” - &gt;启用“application / x-www-form-urlencoded”,就是这样。
希望这对你有所帮助。