我意识到这个问题已经多次得到解答,但是我找不到针对这个具体案例的解决方案。 我一直在
“警告: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"];
(我没有包含整个代码,所以它不会污染问题)。
我尝试过在论坛上找到的所有解决方案。也许有人之前遇到过这个问题?谢谢你的帮助。
答案 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得到错误。