Использование cURL для загрузки исходного HTML-кода сайта, но получение файла, отличного от предполагаемого

Я пытаюсь использовать cURL и PHP для загрузки исходного HTML-кода (как он отображается в браузере) здесь. Но вместо фактического исходного кода возвращается это (мета-ссылка обновления установлена ​​​​на 0).

<html>
    <head><title>Object moved</title></head>
    <body>
        <h2>Object moved to <a href="https://login.live.com/login.srf?wa=wsignin1.0&amp;rpsnv=11&amp;checkda=1&amp;ct=1321044850&amp;rver=6.1.6195.0&amp;wp=MBI&amp;wreply=http:%2F%2Fwww.windowsphone.com%2Fen-US%2Fapps%2Fea39f002-ac30-e011-854c-00237de2db9e&amp;lc=1033&amp;id=268289">here</a>.
        </h2>
    </body>
</html>

Я пытаюсь подделать заголовок реферала, чтобы он был сайтом, но, похоже, я делаю это неправильно. Код ниже. Какие-либо предложения? Спасибо

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, 'http://www.windowsphone.com/en-US/apps/ea39f002-ac30-e011-854c-00237de2db9e');
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.6 (KHTML, like Gecko) Chrome/16.0.897.0 Safari/535.6'); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt($ch, CURLOPT_AUTOREFERER, false);
curl_setopt($ch, CURLOPT_REFERER, "http://www.windowsphone.com/en-US/apps/ea39f002-ac30-e011-854c-00237de2db9e");

$html = curl_exec($ch);
curl_close($ch);

person user954912    schedule 11.11.2011    source источник
comment
У меня такое ощущение, что я уже отвечал на этот вопрос раньше: stackoverflow.com/questions/8046907/   -  person flesk    schedule 12.11.2011


Ответы (3)


Добавьте опцию curl, чтобы следовать перенаправлениям:

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

Если это мета-обновление, а не перемещенный заголовок HTTP, см.: PHP: может CURL следовать мета-редиректы

Как уже упоминалось flask, вам также может потребоваться хранить файлы cookie.

person jli    schedule 11.11.2011
comment
Я пишу HTML, возвращенный в отдельный файл (чтобы прочитать его позже). Когда я установил для FOLLOWLOCATION значение true, файл стал пустым. - person user954912; 12.11.2011
comment
Это отлично работает, если перенаправление находится только в заголовках. Я только что протестировал его с вашим кодом, и страница возвращает 200 OK с метатегом обновления. Смотрите мою правку. - person jli; 12.11.2011
comment
отлично, проверю. Извините, я новичок во всем этом HTTP/спуфинге/cURL - person user954912; 12.11.2011

Проблема не в реферере, а в том, что вам нужно включить файлы cookie, чтобы он работал.

Попробуйте что-то вроде этого:

curl_setopt($ch, CURLOPT_COOKIEJAR, "cookie.txt");
curl_setopt($ch, CURLOPT_COOKIEFILE, "cookie.txt");

Вы должны запросить страницу дважды. Сначала разрешите перенаправления для получения файла cookie с login.live.com, а затем повторите запрос с набором файлов cookie.

person flesk    schedule 11.11.2011

person    schedule
comment
Это не исправить. Вам нужно, чтобы для параметра следования за местоположением было установлено значение true. - person jli; 12.11.2011