PHP CURL Login with cookie – Stack Overflow

Get запросы curl в php

Или можно использовать аналог через функцию file_get_contents():

Oauth авторизация

Если на сайте реализована работа с OAuth протоколом авторизации, который позволяетвыдать права на действия, которые сам сайт сможет производить на другом ресурсе отлица, авторизовавшегося и давшего это разрешение, пользователя, тогда запрос cURL в php будет выглядеть следующим образом:

Php curl 302 authentication with cookies

I am trying to learn to use PHP curl and it seemed to go well until I have tried to authenticate to changeip.com. Here is the function I use to make a Curl call:

function request($ch, $url, $params = array())
{   
    $options            = array
    (
        CURLOPT_URL                 => $url,
        CURLOPT_USERAGENT           => 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2.8) Gecko/20220722 Firefox/3.6.8',
        //CURLOPT_COOKIESESSION     => TRUE,
        CURLOPT_FOLLOWLOCATION      => TRUE,
        CURLOPT_HEADER              => TRUE,
        CURLOPT_RETURNTRANSFER      => TRUE,
        CURLOPT_SSL_VERIFYPEER      => FALSE,
        CURLOPT_SSL_VERIFYPEER      => FALSE,
        CURLINFO_HEADER_OUT         => TRUE,
        CURLOPT_CONNECTTIMEOUT      => 30,
        CURLOPT_TIMEOUT             => 30,
        CURLOPT_MAXREDIRS           => 30,
        CURLOPT_VERBOSE             => TRUE,
        CURLOPT_COOKIEJAR           => __DIR__ . DIRECTORY_SEPARATOR . 'cookies.txt',
        CURLOPT_COOKIEFILE          => __DIR__ . DIRECTORY_SEPARATOR . 'cookies.txt',
        CURLOPT_HTTPHEADER          => array
        (
            'Host: www.changeip.com',
            'Pragma:',
            'Expect:',
            'Keep-alive: 115',
            'Connection: keep-alive',
            'Accept: text/html,application/xhtml xml,application/xml;q=0.9,*/*;q=0.8',
            'Accept-Language: en-us,en;q=0.5',
            //'Accept-Encoding: gzip,deflate',
            'Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7',
            'Content-Type: application/x-www-form-urlencoded',
        ),
    );

    if(!empty($params['referrer']))
    {
        $options[CURLOPT_REFERER]       = $params['referrer'];
    }

    if(!empty($params['post']))
    {
        $options[CURLOPT_POST]          = TRUE;
        $options[CURLOPT_POSTFIELDS]    = $params['post'];
    }

    curl_setopt_array($ch, $options);

    $return             = array();  
    $return['body']     = curl_exec($ch);
    $info               = curl_getinfo($ch);
    //die(var_dump( curl_getinfo($ch, CURLINFO_HEADER_OUT) ));
    $return['header']   = http_parse_headers(substr($return['body'], 0, $info['header_size']));
    $return['body']     = substr($return['body'], $info['header_size']);

    /*if(!empty($return['header']['Location']))
    {
        $params['referrer'] = $url;
        return request($ch, substr($url, 0, strrpos($url, '/') 1) . $return['header']['Location'], $params);
    }*/

    return $return;
}

And here is the actual call:

// chaneip
$ch                 = curl_init();

// login
$params             = array();
$params['post']     = array
(
    'p' => 'aaaaaa2',
    'u' => 'aaaaaa2',
);

$params['referrer'] = 'https://www.changeip.com/login.asp';

$return             = request($ch, 'https://www.changeip.com/loginverify.asp?', $params);

However, this script does not retrieve valid cookies from changeip.com, i.e., does not authenticate. I have tried to compare Curl sent headers with HTTPLiveHeaders expecting to find any difference but in the end I didn’t find anything. Can anyone advice me what is missing to make this work?

Похожее:  Русский Стандарт Банк: регистрация и вход в личный кабинет

Commonly given question:
is cookie.txt 0777? Yes and the script does actually create some sort of cookie:
www.changeip.com FALSE / FALSE 0 ACloginAddrs 6
www.changeip.com FALSE / FALSE 0 ASPSESSIONIDCCSSCQRA DNHKGDICMKHFIJADMAPPMHHC

But it isn’t a valid cookie.

Post запросы curl в php

Функция file_get_contents() так же умеет отправлять POST запросы. Для этого нужно использовать заголовки:

Unauthorized access when curl php request with cookies

I am trying to access a page, say http://www.domain.com/profile. The action and login urls are the same, and I am trying to save cookies to http://www.example.com/cookies.txt for authentication. Here is the code I’m using:

$loginURL = 'http://www.domain.com/login';
$COOKIE_FILE = 'http://wwww.example.com/cookies.txt';
$postValues = array(
    'username' => 'myusername',
    'password' => 'mypassword'
);
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $loginURL); 
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($postValues));
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_COOKIEJAR, $COOKIE_FILE);
curl_setopt($curl, CURLOPT_USERAGENT, 'Chrome/35.0.2309.372');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_REFERER, $loginURL); 
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_exec($curl);
if(curl_errno($curl)){throw new Exception(curl_error($curl));}

// now we are logged in, attempt to access a password-protected page
curl_setopt($curl, CURLOPT_URL, 'http://www.domain.com/profile');
curl_setopt($curl, CURLOPT_COOKIEJAR, $COOKIE_FILE);
curl_setopt($curl, CURLOPT_USERAGENT, USER_AGENT);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
echo curl_exec($curl);

It seems like the curl requests are successful, but I am getting echoed a page from the server saying “Unauthorized Access”. I don’t think my cookies system is working correctly? How can I check that? How do I fix it?

Запрос через proxy

Когда нужно сделать запрос, подменив при этом источник запроса на промежуточный адрес, то используйте опцию PROXY:

Использование curl для авторизации…

Да, авторизация basic. А разве есть разница, если первый этап авторизации у меня проходит успешно? А вот второй, где используются куки – не работает…

Вот, изменил вторую часть:

PHP:

$ch1 = curl_init("http://example.ru/login.pl");
curl_setopt($ch1, CURLOPT_VERBOSE, 2); 
curl_setopt($ch1, CURLOPT_ENCODING, 0); 
curl_setopt($ch1, CURLOPT_USERAGENT, 'Mozilla/5.0'); 
curl_setopt($ch1, CURLOPT_COOKIEFILE, $_SERVER['DOCUMENT_ROOT'].'/cookie.txt'); 
curl_setopt($ch1, CURLOPT_COOKIEJAR, $_SERVER['DOCUMENT_ROOT'].'/cookie.txt');
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch1, CURLOPT_FAILONERROR, 1);
curl_setopt($ch1, CURLOPT_HEADER, 1);
curl_setopt($ch1, CURLINFO_HEADER_OUT, 1);
curl_setopt($ch1, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($ch1, CURLOPT_COOKIE, "cookie1=1;cookie2=2"); 
curl_setopt($ch1, CURLOPT_POSTFIELDS, "login=login&password=password");
$result_2 = curl_exec($ch1);
echo "Result:nn";
echo $result_2;
curl_close($ch1);

Эффекта ноль. Переменная $result_2 абсолютно пуста.

В чем проблема, не понимаю… Даже если просто ввести в строке браузера “http://тотсамыйсайт.ru/login.pl?login=login&password=password”, то само сабой все работает, куки создаются, авторизация проходит успешно…

В общем, я с http заголовками и курлом знаком слабо, а с fsockopen и подавно =)
Посоветуйте, что еще можно сделать, или направьте на пример использования fsockopen для аналогичного случая.

Спасибо.

Методом ftp

Не смотря на то, что в PHP есть библиотека для работы с FTP, все же cURL также позволяет работать по этому протоколу напрямую.

Методом post

Таким образом можно отправить один или несколько файлов сразу:

Методом put

Мульти запросы curl в php

Обычно в скрипте PHP выполнение запросов cUrl производится последовательно, то есть друг за другом. Пока не вернется результат предыдущего запроса, новый не выполнится.

Одной из самых важных особенностью cURL в PHP является возможность осуществлять несколько асинхронных запросов одновременно.

Например, если нужно собрать независимые друг от друга данные с разных сайтов, то можно организовать их параллельный сбор. Можно также произвести несвязанные вычисления или обработку данных через асинхронные запросы к скриптам в отдельных файлах.

Эта особенность позволяет оптимизировать работу скрипта и сократить время его выполнения.

Функция curl_multi_exec() многократно вызывается в цикле с постусловием, где параметр $running имеет значение количества активных соединений.

Чем больше обработчиков в параллельной работе, тем больше сокращается время выполнения скрипта, поэтому нелишним будет внедрить привычку использовать эту возможность cURL в своих скриптах.

Отправить и получить cookie

Для сохранения куки в файле необходимо указать путь к этому файлу в соответствующих параметрах CURLOPT_COOKIEFILE и CURLOPT_COOKIEJAR.

Параметр CURLOPT_COOKIE используется для принудительной передачи значения куки:

Отправка curl запроса php

Формирование cURL запроса состоит из четырех этапов:

  1. Инициализация
  2. Указание параметров
  3. Выполнение команды и получение результата
  4. Освобождение памяти

Итак, как это должно выглядеть в коде:

Этапы 1,3 и 4 типовые для всех типов запросов. А на этапе 2, в зависимости от указанных параметров, как раз и формируется тот или иной тип запроса.

Отправка файлов на другой сервер используя curl

Есть несколько вариантов передачи файлов между серверами.

Получение информации о запросе curl

Чтобы получить исчерпывающую информацию о самом запросе используется функция curl_getinfo(). Главным образом эта информация полезна для отладки работы скрипта, в котором выполняются cURL запросы.

Функция возвращает данные в виде массива со следующими ключами:

Скачивание файлов

При передаче указателя на открытый файл в параметре CURLOPT_FILE результат выполнения скрипта записывается сразу в файл.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *