Я хотел бы использовать 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;
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()
гораздо проще в использовании и чтении.
Других решений пока нет …