带有帖子数据的php file_get_contents

时间:2012-10-23 04:42:34

标签: php http encoding stream

  

可能重复:
  Drupal login via Rest server

我一直在使用此代码获取带有帖子数据的文件获取内容但收到错误

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);

?>

任何人都可以提前帮助。

3 个答案:

答案 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,所以你应该在代码中重写一些东西。

  1. 更改$postdata构造:

    $postdata = json_encode(array(
        'var1' => 'myuser',
        'var2' => 'pwd'
    ));
    
  2. 更改Content-Type标题:

    $opts = array('http' => array(
        'method'  => 'POST',
        'header'  => 'Content-type: application/json',
        'content' => $postdata
    ));
    

答案 2 :(得分:0)

对于HTTP流包装器,

file_get_contents在出错时返回FALSE。错误表示HTTP响应的任何错误情况,例如来自400范围的HTTP状态代码,例如406 Not Acceptable: Unsupported request content type

您可以将ignore_errorsHTTP 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”,就是这样。

希望这对你有所帮助。