cURL Cookie и проблема 307 перенаправления - PullRequest
1 голос
/ 27 сентября 2010

В настоящее время у меня есть скрипт, который загружает страницу на моем клиентском сервере, используя cURL.В настоящее время настройки

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt( $ch, CURLOPT_AUTOREFERER, true );
curl_setopt($ch,CURLOPT_USERAGENT,$useragent);
curl_setopt($ch, CURLOPT_HEADER, 0);

$usecookie = ROOT_PATH . "/public_html/football_parser/cookie.txt";

if($usecookie) {
 if (!is_writable($usecookie)) {
   return "Can't write to $usecookie cookie file, change file permission to 777 or  remove read only for windows.";
  }
curl_setopt($ch, CURLOPT_COOKIEJAR, $usecookie);
curl_setopt($ch, CURLOPT_COOKIEFILE, $usecookie);
 }
 $output = curl_exec($ch);

Я пытаюсь загрузить два примера URL

statto.com / футбол / команды / newcastle-united / 2005-2006 / результаты

и

statto.com / футбол / команды / newcastle-united / 2008-2009 / результаты

Второй загружается без проблем.Первый не загружается без установки curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE).Однако, когда он загружается, он перенаправляет на страницу с ошибкой, но это нормально в моем браузере.Мне сказали, что на этой странице есть перенаправление 307, которое переключается между страницей, которую я вижу в моем браузере, и страницей с ошибкой 404, которую я получаю в cURL.Я могу сделать так, чтобы эта страница ошибки отображалась в моем браузере, если я удалю UID cookie, но я проверил файл cookie на моем сервере, и он, кажется, установлен нормально и присутствует.

Может кто-нибудь сказать мне, какбудет свернуть первый URL и посмотреть, что я вижу в своем браузере, а не 404 перенаправления?

Большое спасибо

Мишель

1 Ответ

1 голос
/ 10 сентября 2012

Когда я просматриваю первый URL в своем браузере в режиме инкогнито (чистая банка cookie), происходит следующее:

307 redirect
Cache-Control:post-check=0, pre-check=0
Cache-Control:no-store, no-cache, must-revalidate
Connection:Keep-Alive
Content-Encoding:gzip
Content-Length:20
Content-Type:text/html
Date:Mon, 10 Sep 2012 08:30:40 GMT
Expires:Mon, 10 Sep 2012 08:30:40 GMT
Keep-Alive:timeout=5, max=50
Last-Modified:Mon, 10 Sep 2012 08:30:40 GMT
Location:/home/error/404
MS-Author-Via:DAV
Pragma:no-cache
Server:Apache
Set-Cookie:options=DD0505030; expires=Tue, 10-Sep-2013 08:30:40 GMT; path=/; domain=www.statto.com
Set-Cookie:uid=3bdb30f60000-00-00USbf62da837b5bb608f95715dea80a8efa; expires=Tue, 30-Oct-2012 08:30:40 GMT; path=/; domain=www.statto.com
Vary:Accept-Encoding
X-Powered-By:PleskLin
X-Robots-Tag:index, noarchive

Как видите, местоположение: / home / error / 404. Таким образом, это происходит просто из-за того, что этот веб-сайт, похоже, допустил ошибку (я не могу определить любую возможную причину для этого, чтобы быть правильным поведением). В любом случае, чтобы компенсировать их ошибку, вам нужно сначала установить cookie (сделать запрос на эту страницу и перенаправиться на страницу ошибки 404), а затем запросить страницу СНОВА с файлом cookie, который вы сгенерировали в последний раз. вокруг.

Надеюсь, вы можете просто сделать:

 $output = curl_exec($ch);
 $output = curl_exec($ch);

Я не могу вспомнить, нужно ли сбрасывать маркеры скручивания или что-то в этом роде, если это не сработает, попробуйте создать другой дескриптор скручивания с почти такими же параметрами, как вы использовали выше, и выполняйте его после выполнения вашего первого скручиваемая ручка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...