Php curl отправить куки

Имеется сайт с определенными данными, который в личном кабинете пользователя выводятся в модальном окне (ajax). В личный кабинет соответственно попадаем после авторизации. В js скриптах я нашел путь к PHP файлу, с которого выводятся данные через ajax.

Теперь я первым делом curl прохожу авторизацию (успешно):

function send_post_get_cookie($URL='', $PostData=Array(), $cookie='') < if (strlen($URL)<=0) return false; $ua = 'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.2.13) Gecko/20101203 MRA 5.7 (build 03796) Firefox/3.6.13'; $ch = curl_init($URL); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_NOBODY, 1); curl_setopt($ch, CURLOPT_USERAGENT, $ua); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $PostData); if (strlen($cookie)>0) curl_setopt($ch, CURLOPT_COOKIE, $cookie); $result = curl_exec($ch); curl_close($ch); $lines = explode("\n", $result); for ($i=0, $cnt=count($lines); $i

Далее пытаюсь curl + post отправить сессию и post данные на этот самый PHP файл (например https://site.ru/js/dannye.php) но как не стараюсь — пишет что сессия устарела или-же 400 bad request.

function open($URL='', $cook='') < $ua = 'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.2.13) Gecko/20101203 MRA 5.7 (build 03796) Firefox/3.6.13'; $ch = curl_init($URL); curl_setopt($ch, CURLOPT_USERAGENT, $ua); curl_setopt($ch, CURLOPT_COOKIE, $cook); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, array( 'page'=>'1' )); $answer = curl_exec($ch); curl_close ($ch); return $answer; >

Запускаю все это дело таким образом:

$cookie = send_post_get_cookie('https://site.ru/login.php', array( 'user'=>'test@test.ru', 'password'=>'12345' )); open('https://site.ru/js/dannye.php',$cookie);

Но постоянно пишет что сессия истекла, как только не пробовал. В чем моя ошибка?

. LOGIN Request Headers: POST /login.php HTTP/1.1 Host: sitename.ru Connection: keep-alive Content-Length: 72 Cache-Control: max-age=0 Upgrade-Insecure-Requests: 1 Origin: https://sitename.ru Content-Type: application/x-www-form-urlencoded User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36 OPR/70.0.3728.106 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9 Sec-Fetch-Site: same-origin Sec-Fetch-Mode: navigate Sec-Fetch-User: ?1 Sec-Fetch-Dest: document Referer: https://sitename.ru/login.php Accept-Encoding: gzip, deflate, br Accept-Language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7 Cookie: PHPSESSID=i99n3d2s6v1oibcsdp4vpa9rs2; skin=1 . MODAL Request Headers: Accept: */* Accept-Encoding: gzip, deflate, br Accept-Language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7 Connection: keep-alive Content-Length: 81 Content-Type: application/x-www-form-urlencoded Cookie: skin=1; PHPSESSID=i99n3d2s6v1oibcsdp4vpa9rs2; skin=1 Host: sitename.ru Method: POST /js/dannye.php HTTP/1.1 Origin: https://sitename.ru Referer: https://sitename.ru/main.php Sec-Fetch-Dest: empty Sec-Fetch-Mode: cors Sec-Fetch-Site: same-origin User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36 OPR/70.0.3728.106

Источник

Отправка cookie через cURL

Наверняка, Вы знаете, что контент страницы, отдаваемой сервером, иногда зависит от cookie, присланных клиентом (в частности, браузером). Это аналогично тому, что видит неавторизованный пользователь и авторизованный. Вот в этой статье мы с Вами научимся отправлять cookie через cURL.

Давайте для начала разберёмся с файлом-приёмником. Данный файл будет считывать cookie пользователя, и если это данные администратора, то выводить один контент, а если нет, то возвращать другой:

Теперь создадим скрипт, который будет отправлять cookie через cURL сначала «Администраторские«, а потом другие.

if( $curl = curl_init() ) curl_setopt($curl, CURLOPT_URL, ‘http://temp.local/script.php’);
curl_setopt($curl, CURLOPT_RETURNTRANSFER,true);

curl_setopt($curl, CURLOPT_COOKIE, «login=Admin;password=123456»);
$out = curl_exec($curl);
echo $out;
curl_setopt($curl, CURLOPT_COOKIE, «login=some;password=123456»);
$out = curl_exec($curl);
echo $out;

Код здесь достаточно прозрачный, однако, на некоторых моментах, пожалуй, остановлюсь. В частности, обратите внимание, как задаются cookie. То есть формат такой: «name1=value1;name2=value2«. Потому что иногда люди путают и вместо «;» ставят «&«. И, главное, Вы должны усвоить, что один и тот же URL для одного пользователя будет содержать один контент, а для другого совсем другой. И зависит это от заголовков, посланных на сервер, в частности, cookie, которые обычно посылает браузер, но в нашем случае посылается с cURL.

После этой статьи у Вас открываются фантастические возможности по автоматизации определённых вещей. Простой пример: есть сайт, на котором находится определённая информация, доступная только зарегистрированным пользователям. Эта информация Вам нужна постоянно, но Вам не хочется постоянно заходить на сайт, авторизовываться и искать эту информацию. Вы можете написать простой скрипт, который подключится к нужному URL и передаст нужные cookie, чтобы сервер принял Вас за авторизованного пользователя. Далее сервер вернёт Вам нужную страницу с нужной Вам информацией, которую Вы и выводите. Таким образом, Вам надо будет только обновить страницу со скриптом, чтобы сразу увидеть нужную Вам информацию.

Создано 12.03.2011 14:51:28

  • Михаил Русаков
  • Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

    Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
    Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

    Если Вы не хотите пропустить новые материалы на сайте,
    то Вы можете подписаться на обновления: Подписаться на обновления

    Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

    Порекомендуйте эту статью друзьям:

    Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

    1. Кнопка:
      Она выглядит вот так:
    2. Текстовая ссылка:
      Она выглядит вот так: Как создать свой сайт
    3. BB-код ссылки для форумов (например, можете поставить её в подписи):

    Комментарии ( 1 ):

    Здравствуйте. А можете добавить статью, как получать cookie и сохранять его в файл и как этот файл использовать в дальнейшем

    Для добавления комментариев надо войти в систему.
    Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.

    Copyright © 2010-2023 Русаков Михаил Юрьевич. Все права защищены.

    Источник

    PHP CURL With Cookies (Simple Examples)

    Welcome to a tutorial on how to do PHP CURL calls with cookies. Need to do a server-to-server call that involves cookies? Well yes, CURL is fully capable of handling that with a few small tweaks.

    To do a PHP CURL call with cookies, we use CURLOPT_COOKIEJAR to specify where to save the cookie after the call ends, and CURLOPT_COOKIEFILE to specify which cookie file to send to the remote server.

    • $cookie = «COOKIE.TXT»;
    • $ch = curl_init();
    • curl_setopt($ch, CURLOPT_URL, «HTTP://SITE.COM»);
    • curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie);
    • curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie);
    • curl_exec($ch);
    • curl_close($ch);

    That covers the basics, but read on for more examples!

    TLDR – QUICK SLIDES

    PHP CURL With Cookies

    TABLE OF CONTENTS

    PHP CURL COOKIES

    All right, let us now get into the examples of handling cookies with PHP CURL.

    1A) LOCAL SERVER CURL CALL

    This is just a “slightly improved” version of the introduction snippet to output the exchange results between the local and remote servers.

    1B) DUMMY REMOTE SERVER

    On the dummy remote server – We simply output the received cookie and send a header to set the Test cookie to the current timestamp.

    1C) WHAT WILL HAPPEN

    Оцените статью