ЭТО БЫЛО РЕШЕНО - СМОТРИТЕ ОТВЕТ НА КОНЦЕ ЭТОГО ПОЧТЫ
Я пытаюсь получить данные с удаленного сервера, используя PHP / cURL
Если явставьте следующий URL в браузер, данные вернутся правильно.
http://realm103.c7.castle.wonderhill.com/api/map.json?user%5Fid=5245274&x=375&y=375×tamp=1310554325&%5Fsession%5Fid=5b2070a46a083a33e053d60dbc2d062e&dragon%5Fheart=098d2deb0a37f18c97428d636c456572f9bade24&version=3
Однако, когда я пытаюсь получить доступ, если с помощью PHP / cURL он просто отключается (код ошибки 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 идентичны.
http://realm4.c5.castle.wonderhill.com/api/map.json?user%5Fid=1053774&x=375&y=375×tamp=1310616808&%5Fsession%5Fid=5b2070a46a083a33e053d60dbc2d062e&dragon%5Fheart=f35f476facab91f0e901eaf2209a0c8a9b9bedcc&version=3
ОТВЕТ
Наконец вернемся к этому и обнаружим, что проблема была в реферере.Сервер ожидал, что в заголовке запроса не будет реферера.Когда это было сделано, запрос был заблокирован.Такое поведение, вероятно, не было согласованным на всех серверах в то время, но сейчас оно есть.Удаление реферера из заголовка запроса и оставление всего остального теперь работает.