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

Замечание модератора:
Эта тема была закрыта автоматически ввиду отсутствия активности в ней на протяжении 100+ дней.
Если Вы считаете ее актуальной и хотите оставить сообщение, то воспользуйтесь кнопкой
или обратитесь к любому из модераторов.


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


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


Свернуть

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

  Тема Ответов Автор Просмотров Последний ответ
Горячая тема (нет новых ответов) Тема имеет прикрепленные файлыЕсть среди нас алкаши?
155 Вазелин 8278 14.5.2018, 18:02
автор: prodesignart
Горячая тема (нет новых ответов) Веду набор в команду. Нужны специалисты.
29 SequelONE 1510 6.5.2018, 20:35
автор: rokot
Открытая тема (нет новых ответов) Есть эксперты HTML + CSS ?
4 _fan_ 615 3.5.2018, 22:32
автор: _fan_
Открытая тема (нет новых ответов) Есть постравшие от сегодняшнего обновления поисковой базы от Яндекса
28 Postdanke 3454 29.4.2018, 22:48
автор: rom_4
Открытая тема (нет новых ответов) Есть что по теме WP - Customizr? на ютубе
3 HavingingWorld 1242 27.4.2018, 14:46
автор: HavingingWorld


 



RSS Текстовая версия Сейчас: 22.5.2018, 8:18
Дизайн