我想使用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 :(得分:1)
cURL将保留其会话cookie,直到您关闭或重新初始化句柄,所以不要这样做,你应该没事。在此示例中,您从$url
收到的任何Cookie都会传递到$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
设置为空字符串会将cookie存储在内存中,无需指定CURLOPT_COOKIEJAR
。个人偏好,但我发现curl_setopt_array()
更容易使用和阅读。