Как передать cookie в curl на php страницу с json ответом?
Имеется сайт с определенными данными, который в личном кабинете пользователя выводятся в модальном окне (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.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
- Кнопка:
Она выглядит вот так: - Текстовая ссылка:
Она выглядит вот так: Как создать свой сайт - BB-код ссылки для форумов (например, можете поставить её в подписи):
Комментарии ( 1 ):
Здравствуйте. А можете добавить статью, как получать cookie и сохранять его в файл и как этот файл использовать в дальнейшем
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.
Copyright © 2010-2023 Русаков Михаил Юрьевич. Все права защищены.