http://www.urbanoutfitters.com/urban/catal...e&guide-bn=true
Если включить CURLOPT_FOLLOWLOCATION, то код страницы нормально получается.
Если без CURLOPT_FOLLOWLOCATION делать редирект вручную - не выходит. Замучался уже

Вот исходный код скрипта:
function redirect_exec($ch)
{
curl_setopt($ch, CURLOPT_HEADER, 1);
$data = curl_exec($ch);
$info = curl_getinfo($ch);
$http_code = $info['http_code'];
if ($http_code == 301 || $http_code == 302 || $http_code == 303)
{
list($header) = explode("\r\n\r\n", $data, 2);
$matches = array();
preg_match('/(Location:|URI:)(.*?)\n/', $header, $matches);
$url = trim(array_pop($matches));
$url_parsed = parse_url($url);
if (isset($url_parsed['host']))
{
curl_setopt($ch, CURLOPT_REFERER, $info['url']);
curl_setopt($ch, CURLOPT_URL, $url);
return redirect_exec($ch);
}
}
elseif($http_code == 200)
{
$matches = array();
preg_match('/(<meta http-equiv=)(.*?)(refresh)(.*?)(url=)(.*?)[\'|"]\s*>/', strtolower($data), $matches);
$url = trim(array_pop($matches));
$url_parsed = parse_url($url);
if (isset($url_parsed['host'])) {
curl_setopt($ch, CURLOPT_REFERER, $info['url']);
curl_setopt($ch, CURLOPT_URL, $url);
return redirect_exec($ch);
}
}
return $info['url'];
}
$url = 'http://www.urbanoutfitters.com/urban/catalog/productdetail.jsp?id=17550583&navAction=jump&isProduct=true&parentid=MORE%20IDEAS&isProduct=true&cross-sell=true&guide-bn=true';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
// curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 20);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_COOKIESESSION, 1);
curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(__FILE__) . '/cookie.txt');
curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__) . '/cookie.txt');
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; MRA 4.5 (build 01399))');
curl_setopt($ch, CURLOPT_URL, $url);
$s = @curl_exec($ch);
$info = curl_getinfo($ch);
$http_code = $info['http_code'];
if ($http_code == 301 || $http_code == 302 || $http_code == 303)
{
$url = redirect_exec($ch);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_URL, $url);
$s = @curl_exec($ch);
}
curl_close($ch);
Если раскомментировать строку curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); то $s будет содержать код страницы.
Если оставить, как есть - $s пустая в конце.
Подскажите.
Спустя 10 минут, 25 секунд (9.11.2010 - 16:28) Семён написал(а):
По заголовкам переходить на страницу редиректа.
Спустя 5 минут, 20 секунд (9.11.2010 - 16:33) Семён написал(а):
Да ещё по той ссылке что ты привёл происходит 2-ва редиректа
1-ый на
2-ой на
1-ый на
Redirect to: http://redirect.urbanoutfitters.com/urban/user/site_preference.jsp?originalURL=/urban/catal og/productdetail.jsp&id=17550583&navAction=jump&isProduct=true&parentid=MORE%20IDEAS&isProduct=true&cross-sell=true&guide-bn=true
2-ой на
Redirect to: http://www.urbanoutfitters.com/urban/catalog/productdetail.jsp?cross-sell=true&isProduc t=true&guide-bn=true&navAction=jump&parentid=MORE IDEAS&id=17550583&availableOptions=availableOptions
Спустя 5 минут, 10 секунд (9.11.2010 - 16:39) VadikV написал(а):
Цитата (Семён @ 9.11.2010 - 13:33) |
Да ещё по той ссылке что ты привёл происходит 2-ва редиректа 1-ый на Redirect to: http://redirect.urbanoutfitters.com/urban/user/site_preference.jsp?originalURL=/urban/catal og/productdetail.jsp&id=17550583&navAction=jump&isProduct=true&parentid=MORE%20IDEAS&isProduct=true&cross-sell=true&guide-bn=true 2-ой на Redirect to: http://www.urbanoutfitters.com/urban/catalog/productdetail.jsp?cross-sell=true&isProduc t=true&guide-bn=true&navAction=jump&parentid=MORE IDEAS&id=17550583&availableOptions=availableOptions |
Все это делается этим скриптом. Там редирект происходит столько раз, сколько будет нужно. Попробуйте выполнить скрипт. Он самодостаточен.
И заголовки анализируются и куки сохраняются.....
Скрипт дорабатывает до логического конца - до кода 200. Но при этом выдается пустая страница (если делать редирект скриптом, а не curl)
Спустя 16 минут (9.11.2010 - 16:55) Семён написал(а):
А зачем делать редиректы вручную ?
Спустя 3 минуты, 41 секунда (9.11.2010 - 16:58) VadikV написал(а):
Цитата (Семён @ 9.11.2010 - 13:55) |
А зачем делать редиректы вручную ? |
Потому что на хосте запрещен curl редирект автоматом.
Опция CURLOPT_FOLLOWLOCATION запрещена.
Давай не будем флудить! Не знаешь - не пиши.
Спустя 57 минут, 35 секунд (9.11.2010 - 17:56) Семён написал(а):
Поверь знаю.
Но тебе мудаку помогать теперь не стану.

Спустя 15 часов, 51 минута, 33 секунды (10.11.2010 - 09:47) VadikV написал(а):
А кроме этого, задушенного самомнением, Семена кто-нибудь может подсказать?
Процедура редиректа отрабатывает нормально до получения конечного адреса. Только что-то теряется где-то и в конце, по конечному линку, выходит пустая страница.
Процедура редиректа отрабатывает нормально до получения конечного адреса. Только что-то теряется где-то и в конце, по конечному линку, выходит пустая страница.
Спустя 33 минуты, 4 секунды (10.11.2010 - 10:20) Joker написал(а):
VadikV
Бан на 4 часа.
Причина: Провокация пользователей.
Бан на 4 часа.
Причина: Провокация пользователей.