为什么我会收到“无法打开流:HTTP请求失败!”?

时间:2015-11-09 18:49:58

标签: php file-get-contents

我意识到这个问题已经多次得到解答,但是我找不到针对这个具体案例的解决方案。 我一直在

  

“警告:file_get_contents(http://www.myserver.com/api/v1/123)   [function.file-get-contents]:无法打开流:HTTP请求   失败! HTTP / 1.1 500内部服务器错误   第44行/home/content/d/a/v/server/html/getFile.php“

我的代码:

$id  = $_GET['id']; 
//$id = urlencode(stripslashes($id)); <- What I´ve tried. No dice.
//$id = "123";    <- hardcoding the ID solves the problem.

// Create stream
$opts = array(
  'http'=>array(
    'method'=>"GET",
    'header'=>"Token: abc\r\n" .
              "Token-Client: xyz\r\n" 
  )
);

$context = stream_context_create($opts);
// Open the file
$file = file_get_contents('http://www.myserver.com/api/v1/'.$id , false, $context);

我的要求:

http://myserver.com/getFile.php?id=123

1)urlencode没有区别。参数没有空格也没有特殊的字符。我也尝试过stripslashes()。

2)如果我对$ id进行硬编码,就像$id="123";一样,它可以正常工作。

3)当我从数据库中获取$ id的值时,我注意到了同样的错误,如$id = $row["id"];(我没有包含整个代码,所以它不会污染问题)。

我尝试过在论坛上找到的所有解决方案。也许有人之前遇到过这个问题?谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

使用curl解决了这个问题。

$url = 'http://www.myserver.com/api/v1/'.$id;

$ch = curl_init();
$header=array(
    'method'=>"GET",
    'header'=>"Token: abc\r\n" .
              "Token-Client: xyz\r\n" 
  );

    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
    curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,0);
    curl_setopt( $ch, CURLOPT_COOKIESESSION, true );

    curl_setopt($ch,CURLOPT_COOKIEFILE,'cookies.txt');
    curl_setopt($ch,CURLOPT_COOKIEJAR,'cookies.txt');
    curl_setopt($ch,CURLOPT_HTTPHEADER,$header);
    $file=curl_exec($ch);
    curl_close($ch);

工作正常,但我不知道为什么我使用file_get_contents得到错误。