此问题已解决 - 请参阅本文末尾的答案
我正在尝试使用 PHP/cURL 从远程服务器检索数据
如果我将以下 URL 放入浏览器,数据会正确返回。
但是,当我尝试使用 PHP/cURL 访问 if 时,它只是超时(错误代码 28)。
$json = curl($jsonurl, $realm['intRealmID'], $realm['strRealmServer']);
function curl($url, $realm, $realmServer){
$header = array();
$header[] = 'Host: realm'.strval($realm).'.'.$realmServer.'.castle.wonderhill.com';
$header[] = 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8';
$header[] = 'Accept-Language: en-us,en;q=0.5';
$header[] = 'Accept-Encoding: gzip,deflate';
$header[] = 'Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7';
$header[] = 'Connection: keep-alive';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0');
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_AUTOREFERER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_ENCODING, '');
curl_setopt($ch, CURLOPT_TIMEOUT, 20);
return curl_exec($ch);
curl_close($ch);
有人知道为什么它可以在浏览器上运行但不能通过 cURL 运行吗?谢谢
附加信息 虽然 cURL 不适用于上述 URL。对于下面的 URL,它工作得很好。唯一的区别是请求数据的服务器。数据本身和POST是一样的。
回答
终于回到这个,发现是referrer的问题。服务器期望在请求 header 中看不到引荐来源网址。当它这样做时,请求被阻止。这种行为当时可能在所有服务器上都不一致,但现在是这样了。从请求 header 中删除引荐来源网址并保留其他所有内容现在可以正常工作。
最佳答案
您的 cURL 函数与直接请求信息之间的最大区别是 CURLOPT_HEADER
属性,我会首先尝试从代码中删除它。
关于php - 使用 cURL 获取错误代码 28,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6678487/