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?

Похожее:  Водоканал Севастополь: вход на сайт sevvodokanal

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 результат выполнения скрипта записывается сразу в файл.