#php #curl
#php #curl
Вопрос:
у меня есть простая функция, которую я использовал для удаленного входа на другие веб-сайты с использованием curl и php, это функция
public function Curllogin($url,$data,$proxy,$proxystatus)
{
$login = curl_init();
curl_setopt($login, CURLOPT_COOKIEJAR,$this->SetCookieFile);
curl_setopt($login, CURLOPT_COOKIEFILE,$this->SetCookieFile);
curl_setopt($login, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
curl_setopt($login, CURLOPT_TIMEOUT, 40);
curl_setopt($login, CURLOPT_RETURNTRANSFER, TRUE);
if ($proxystatus == 'on') {
curl_setopt($login, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($login, CURLOPT_HTTPPROXYTUNNEL, TRUE);
curl_setopt($login, CURLOPT_PROXY, $proxy);
}
curl_setopt($login, CURLOPT_URL, $url);
curl_setopt($login, CURLOPT_HEADER, TRUE);
curl_setopt($login, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
curl_setopt($login, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($login, CURLOPT_POST, TRUE);
curl_setopt($login, CURLOPT_POSTFIELDS, $data);
ob_start(); // prevent any output
return curl_exec ($login); // execute the curl command
ob_end_clean(); // stop preventing output
curl_close ($login);
unset($login);
}
он работает без проблем при входе в систему
но я обнаружил небольшую проблему
допустим, я вхожу в example.com и передал имя пользователя и пароль в переменной $data
он войдет в систему без проблем
но при изменении значений $ data с использованием другого имени пользователя и пароля я регистрируюсь со старыми именем пользователя и паролем, которые использовались для последнего входа
игнорирование новой информации для входа
я пробовал все, например, удаление cookies.txt запишите файл и позвольте скрипту воссоздать его
я даже пытался очистить файлы cookie, кэшированные в моем браузере
но это не изменит его для использования новых данных
каждый раз при этом используются первые имя пользователя и пароль, которые я использовал для входа в систему
существует ли какая-либо функция для уничтожения файлов cookie, созданных CURL, или я что-то пропустил?
Ответ №1:
Просто измените свой $this->SetCookieFile
на пустой файл, возможно, случайный файл во временном каталоге. Файлы cookie вашего «реального» браузера не имеют к этому никакого отношения, cURL управляет файлами cookie отдельно от этого.
Комментарии:
1. вы имеете в виду, что я создаю другую функцию, устанавливающую значение $this->SetCookieFile равным null, и вызываю эту функцию каждый раз, когда я использую его для выхода из системы?
2.
CURLOPT_COOKIEJAR
/CURLOPT_COOKIEFILE
— это файл, в котором cURL хранит все полученные файлы cookie и берет файлы cookie для отправки обратно при любых запросах по мере необходимости. Аналогия с очисткой файлов cookie вашего браузера заключается в очистке этого файла.