1. Набираем команду codeby webinar. Набираем команду для организации и проведения вебинаров. Подробнее ...

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление
  3. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление

Curl и ручной редирект

Тема в разделе "Web - программирование", создана пользователем VadikV, 10 ноя 2010.

  1. VadikV

    VadikV Member

    Репутация:
    0
    Регистрация:
    10 ноя 2010
    Сообщения:
    17
    Симпатии:
    0
    Есть адрес страницы продукта (прописан в скрипте).
    Если включить CURLOPT_FOLLOWLOCATION, то код страницы нормально получается.
    Если без CURLOPT_FOLLOWLOCATION делать редирект вручную - редирект проходит нормально до конца, но в конце выдается пустая страница. Замучался уже.
    Зачем это нужно? Хост не дает использовать CURLOPT_FOLLOWLOCATION и исправить это нельзя.
    Вот исходный код скрипта:
    PHP:
        function redirect_exec($ch
    {
    curl_setopt($chCURLOPT_HEADER1);
    $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"$data2);
    $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($chCURLOPT_REFERER$info['url']);
    curl_setopt($chCURLOPT_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($chCURLOPT_REFERER$info['url']);
    curl_setopt($chCURLOPT_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($chCURLOPT_URL$url);
    //            curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($chCURLOPT_TIMEOUT20);
    curl_setopt($chCURLOPT_RETURNTRANSFER1);
    curl_setopt($chCURLOPT_COOKIESESSION1);
    curl_setopt($chCURLOPT_COOKIEFILEdirname(__FILE__) . '/cookie.txt'); 
    curl_setopt($chCURLOPT_COOKIEJARdirname(__FILE__) . '/cookie.txt');
    curl_setopt($chCURLOPT_USERAGENT'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; MRA 4.5 (build 01399))');
    curl_setopt($chCURLOPT_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($chCURLOPT_HEADER0);
    curl_setopt($chCURLOPT_URL$url);
    $s = @curl_exec($ch);
    }

    curl_close($ch);
    Если раскомментировать строку curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); то $s будет содержать код страницы.
    Если оставить, как есть - $s пустая в конце.
    Подскажите.
     
  2. nws

    nws Гость

    Репутация:
    0
    из header'a получи location и перейди по нему
     
  3. VadikV

    VadikV Member

    Репутация:
    0
    Регистрация:
    10 ноя 2010
    Сообщения:
    17
    Симпатии:
    0
    Дело в том, что мой редирект отрабатыевает все переходы нормально.
    Конечный и начальный адрес совпадают. В процессе редиректа он чего-то там делает, а что я не могу понять. Уже и логи все сравнивал - нет разницы между ручным и автоматическим.
    Где-то я что-то упустил....
    Куки уже пробовал руками обрабатывать - тоже не помогает. Если есть отладчик - попробуйте пошагать. Я пользуюсь NuSphere PhpED.
    У curl есть режим отладки, где он все в лог-файл пишет. Лог для ручного и автоматического редиректа одинаковый :lovecodeby:
     
  4. nws

    nws Гость

    Репутация:
    0
    скачай плагин для FF HttpFox там увидишь что передается серверy и его ответы
     
  5. VadikV

    VadikV Member

    Репутация:
    0
    Регистрация:
    10 ноя 2010
    Сообщения:
    17
    Симпатии:
    0
    Есть этот плагин. По нему и анализировал логи работы. Мои логи полностью совпадают с этими. Разница только в параметрах, которые время хранят ну и в sessionid.
     
Загрузка...
Похожие Темы - Curl ручной редирект
  1. hitesh
    Ответов:
    6
    Просмотров:
    469
  2. sasha465
    Ответов:
    0
    Просмотров:
    3.683
  3. vital
    Ответов:
    0
    Просмотров:
    2.065
  4. admin
    Ответов:
    1
    Просмотров:
    4.801

Поделиться этой страницей