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



 

Здравствуйте, гость (

| Вход | Регистрация )

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


Собрался я пропарсить одну страничку, которая требует наличия куки (т.е. сначала нужно залогинится) и столкнулся с проблемой 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


Свернуть

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

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Есть смысл создавать сайты на латышском?
16 Nekit 3923 31.3.2024, 1:23
автор: Liudmila
Открытая тема (нет новых ответов) Есть ли инструмент для поиска запросов на YouTube?
1 rownong27 993 18.2.2024, 22:19
автор: malamut
Горячая тема (нет новых ответов) Pharmcashusa.com. Есть USA фарма траф? Вам сюда!
36 Herbalka 14618 11.12.2023, 21:27
автор: Herbalka
Открытая тема (нет новых ответов) Кликандеры: есть ли риски в 2023 году?
7 Kiloan_Frost 1676 19.11.2023, 14:46
автор: kuprum
Открытая тема (нет новых ответов) Есть ли прокси ipv4 до 20р за ip ?
14 freeax 5692 6.6.2023, 0:35
автор: xVOVAx


 



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