как мы можем поддерживать сеанс в cURL?
Если у меня есть код, он отправляет регистрационные данные сайта и успешно регистрируется. Мне нужно, чтобы сеанс, поддерживаемый на сайте, продолжался.
вот мой код, который использовался для входа на сайт с использованием cURL
<?php $socket = curl_init(); curl_setopt($socket, CURLOPT_URL, "http://www.XXXXXXX.com"); curl_setopt($socket, CURLOPT_REFERER, "http://www.XXXXXXX.com"); curl_setopt($socket, CURLOPT_POST, true); curl_setopt($socket, CURLOPT_USERAGENT, $agent); curl_setopt($socket, CURLOPT_POSTFIELDS, "form_logusername=XXXXX&form_logpassword=XXXXX"); curl_setopt($socket, CURLOPT_COOKIESESSION, true); curl_setopt($socket, CURLOPT_COOKIEJAR, "cookies.txt"); curl_setopt($socket, CURLOPT_COOKIEFILE, "cookies.txt"); $data = curl_exec($socket); curl_close($socket); ?>
Вот лучший способ найти эту ссылку :
текст ниже – «ремикс» версия содержимого блога :
$useragent = $_SERVER['HTTP_USER_AGENT']; $strCookie = 'PHPSESSID=' . $_COOKIE['PHPSESSID'] . '; path=/'; session_write_close(); $ch = curl_init(); $ch = curl_init($rssFeedLink); curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch,CURLOPT_USERAGENT, $useragent); curl_setopt( $ch, CURLOPT_COOKIE, $strCookie ); $response = curl_exec($ch); curl_close($ch);
Что делает session_write_close()
? Он завершает текущий сеанс и сохраняет данные сеанса. По-видимому, PHP не нравится, когда несколько скриптов играют с сеансом, поэтому он блокирует его. Помещение session_write_close гарантирует, что ваш текущий сеанс будет сохранен, чтобы вы могли его восстановить и использовать.
если вы не используете session_write_close()
вместо использования текущего идентификатора сеанса будет создан новый идентификатор сеанса.
Также PHPSESSID следует заменить именем переменной сеанса. Согласно рекомендациям OWSAP, это должно быть нечто более общее, как, например ,.
Иногда вам нужно отправить агента пользователя с сообщением, поэтому я включил параметр CURLOPT_USERAGENT
.
Так вы делаете CURL с сеансами
//initial request with login data $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'http://www.example.com/login.php'); curl_setopt($ch, CURLOPT_USERAGENT,'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/32.0.1700.107 Chrome/32.0.1700.107 Safari/537.36'); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, "username=XXXXX&password=XXXXX"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_COOKIESESSION, true); curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie-name'); //could be empty, but cause problems on some hosts curl_setopt($ch, CURLOPT_COOKIEFILE, '/var/www/ip4.x/file/tmp'); //could be empty, but cause problems on some hosts $answer = curl_exec($ch); if (curl_error($ch)) { echo curl_error($ch); } //another request preserving the session curl_setopt($ch, CURLOPT_URL, 'http://www.example.com/profile'); curl_setopt($ch, CURLOPT_POST, false); curl_setopt($ch, CURLOPT_POSTFIELDS, ""); $answer = curl_exec($ch); if (curl_error($ch)) { echo curl_error($ch); }
Я видел это на ImpressPages
Поскольку вы ссылаетесь на файл cookie.txt без какой-либо ссылки на папку, я предполагаю, что вы пытаетесь записать файл в папку, недоступную для записи. Поэтому сначала проверьте, действительно ли вы находите файл cookie.txt, и если он содержит файлы cookie (ы) сеанса, которые вы ожидаете.
Я бы, вероятно, переместил этот код в функцию. После успешного входа в систему теперь у вас есть сеанс, связанный с файлом cookie, который у вас есть в файле cookie.txt. При последующих запросах просто продолжайте использовать этот файл cookie, и у вас должен быть действительный сеанс на этом сайте.