хранение сессионных куки с Curl

Я хотел бы использовать PHP-скрипт для вызова веб-сайта с использованием curl и считывания данных там. Проблема в том, что для этого сайта нет API. Пока все работает нормально, но веб-сайт требует аутентификации и проверяет, был ли сохранен файл cookie. С тех пор скрипт PHP, к сожалению, больше не работает. Я понятия не имею, как проверить хранилище cookie, но мне нужно как-то управлять тем, что Curl делает вид, что cookie сохраняется.

У кого-нибудь из вас есть идея?

$agent = "Mozilla/5.0 Gecko/13.0 Firefox/13.0";
$header[] = "Accept: text/vnd.wap.wml,*.*";
$ch = curl_init($url);

if ($ch)
{
curl_setopt($ch,    CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch,    CURLOPT_USERAGENT, $agent);
curl_setopt($ch,    CURLOPT_HTTPHEADER, $header);
curl_setopt($ch,    CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch,    CURLOPT_COOKIEJAR, "");
curl_setopt($ch,    CURLOPT_COOKIEFILE, "");
$postdata = "?username=username&password=password";
curl_setopt($ch,    CURLOPT_POST, 1);
curl_setopt($ch,    CURLOPT_POSTFIELDS, $postdata);
$tmp = curl_exec ($ch);
curl_close ($ch);
}
return $tmp;

0

Решение

cURL будет сохранять свои сеансовые куки до тех пор, пока вы не закроете или повторно инициализируете дескриптор, так что не делайте этого, и у вас все будет хорошо. В этом примере любые куки, которые вы получаете от $url будет передано $new_url,

$agent = "Mozilla/5.0 Gecko/13.0 Firefox/13.0";
$header[] = "Accept: text/vnd.wap.wml,*.*";
$postdata = ["username"=>"username", "password"=>"password"];
$ch = curl_init($url);
if (!$ch) {
echo "ERROR!";
return false;
}
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_USERAGENT      => $agent,
CURLOPT_HTTPHEADER     => $header,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_COOKIEFILE     => "",
CURLOPT_POSTFIELDS     => $postdata,
CURLOPT_POST           => true,
]);
$tmp = curl_exec($ch);

$curl_setopt_array($ch, [
CURLOPT_URL        => $new_url,
CURLOPT_GET        => true,
CURLOPT_POSTFIELDS => null,
CURLOPT_POST       => false,
]);
$tmp = curl_exec($ch);

curl_close($ch);

return $tmp;

Пара заметок: CURLOPT_POSTFIELDS Безопаснее переданный массив. Таким образом, PHP позаботится о том, чтобы URL кодировал все для вас. CURLOPT_COOKIEFILE установка пустой строки будет хранить куки в памяти, нет необходимости указывать CURLOPT_COOKIEJAR, Личные предпочтения, но я нахожу curl_setopt_array() гораздо проще в использовании и чтении.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector