可能的重复:
Drupal登录通过REST服务器
我一直在使用此代码作为文件获取内容,并带有帖子数据,但收到错误
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:xampphtdocspost.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);
?>
任何人都可以在此方面提供帮助。
我们可以使用curl代替函数file_get_contents($ request);这是卷曲的代码:
$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);
$请求是您的URL。
看来,这款特定的服务器期望在调用/login.json
时在帖子数据中看到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 ));
file_get_contents
在HTTP流包装器中也将返回FALSE
。错误是指HTTP响应的任何错误条件,例如400范围的HTTP状态代码,例如406不可接受:您的情况下不支持的请求内容类型。
您可以通过将ignore_errors
HTTP上下文选项设置为 TRUE
:
'ignore_errors' = TRUE,
然后,您也将在错误情况下获得请求的响应主体。
要获得状态代码本身,您可以使用特殊的$http_response_header
变量。
有关这些设置以及如何解析响应标题的讨论,请先查看使用PHP流的Head。但是,在您的情况下,响应主体可能已经包含有关问题的更多信息。
在您的特定问题中,您需要仔细检查请求的编码是否由服务器支持。由于我不知道您的服务器,我对此不能说太多。对错误代码的引用可能会为您提供一些启示。您正在使用的 content-type:application/x-www-form-urlencoded 似乎有问题。
例如,正如本网站上的其他聪明人告诉我的那样,端点是Drupal。如果是这样,则在类似的问题中提出以下建议:
您必须启用服务端点的
application/x-www-form-urlencoded
内容类型。做以下操作:服务 - &gt;编辑资源 - &GT;选择"服务器"选项卡 - &gt;启用"应用程序/x-www-form-urlenCoded"就是这样。
希望这对您有帮助。