X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость ( Вход | Регистрация )

Открыть тему
Тема закрыта
> Есть специалисты по cURL-у?, проблема с CURLOPT_FOLLOWLOCATION,
CyberSEO
CyberSEO
Topic Starter сообщение 4.11.2013, 18:11; Ответить: CyberSEO
Сообщение #1


Новичок
*

Группа: User
Сообщений: 27
Регистрация: 23.9.2013
Поблагодарили: 1 раз
Репутация:   0  


Собрался я пропарсить одну страничку, которая требует наличия куки (т.е. сначала нужно залогинится) и столкнулся с проблемой CURLOPT_FOLLOWLOCATION.

Как известно, на большинстве серверов curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false); не работает, т.к. FOLLOWLOCATION считается потенциально небезопасной штукой. А как быть, если страничка, которую нужно вытянуть через cURL, доступна только через пару редиректов по 301 или 302.

Вот люди и придумали workaround: скрипты, которые сами последовательно пробегают по всем редиректам. Например такой:

function curl_flollow_exec($ch, $redirects = 0) {
    curl_setopt($ch, CURLOPT_HEADER, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
    $data = curl_exec($ch);

    $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);

    if (($http_code == 301 || $http_code == 302) && ++$redirects < 10) {
        preg_match('/(Location:|URI:)(.*?)\n/', $data, $matches);
        if (isset($matches[2])) {
            $redirect_url = trim($matches[2]);
            if ($redirect_url !== '') {
                curl_setopt($ch, CURLOPT_URL, $redirect_url);
                return curl_flollow_exec($ch, $redirects);
            }
        }
    }
    return $data;
}

function curl_post($url, $data, $set_cookie) {
    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_REFERER, $url);
    curl_setopt($ch, CURLOPT_AUTOREFERER, true);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; Linux i686; rv:16.0) Gecko/20100101 Firefox/16.0 Iceweasel/16.0');
    curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
    curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS);
    
    $result = curl_flollow_exec($ch);
    curl_close($ch);

    return $result;
}


В 99 случаях из 100, этот метод прекрасно работает, но, к сожалению, не в моем. Скрипт нормально передает параметры login/password через POST. Сайт их прекрасно проглатывает и ставит нужную куку. Все бы вроде хорошо, но после последнего редиректа на нужную страницу, сервер вместо ее содержимого сообщает что, адрес неверный и того, что я ищу, там нет. Хотя с адресом все в порядке - если вбить его руками, то все нормально. Проблема возникает именно после редиректа через этот скрипт. Сессия, кстати, при этом тоже не отваливается (скрипт остается авторизованным).

Не могу понять, чего такого не хватает в вышеприведенном скрипте, что отличает результат его работы от обычного cURL с включенным CURLOPT_FOLLOWLOCATION (curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true))? Т.е, по идее, в обоих случаях результат должен быть одинаковым. А-н нет! cURL c curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true) срабатывает правильно и сервер выдает то, что нужно, а скрипт, эмулирующий FOLLOWLOCATION выдает 404.

Может кто знает, в чем может быть дело? Я себе уже все волосы на всех местах повыдергивал sad.gif

Сообщение отредактировал CyberSEO - 4.11.2013, 18:13


--------------------
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Тема имеет прикрепленные файлыЕсть ли среди нас Линуксоиды
27 freeax 1834 Вчера, 23:42
автор: Cunningfox
Горячая тема (нет новых ответов) Тема имеет прикрепленные файлыЕсть среди нас алкаши?
82 Вазелин 3261 12.12.2017, 17:34
автор: spomoni
Открытая тема (нет новых ответов) Как найти группы, где в обсуждениях есть аренда
7 Motorocker 998 6.12.2017, 13:49
автор: Nickita_Larionoff
Горячая тема (нет новых ответов) Есть среди нас школьники?
35 Вазелин 1794 17.11.2017, 15:34
автор: tezoro
Открытая тема (нет новых ответов) Какие сейчас есть рабочие инструменты для проверки Whois более 10 млн доменов
0 WinSerfer 706 11.11.2017, 18:51
автор: WinSerfer


 



RSS Текстовая версия Сейчас: 14.12.2017, 10:34
Дизайн