通过卷曲设置cookie
问题描述:
我想通过cURL在PHP中设置cookie,但它失败。我的PHP代码如下所示通过卷曲设置cookie
$ch=curl_init();
$url="http://localhost/javascript%20cookies/test_cookies.html";
curl_setopt($ch, CURLOPT_COOKIE, 'user=1');
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$contents = curl_exec($ch);
curl_close($ch);
echo $contents;
?>
文件test_cookies.html包含的JavaScript来检查一个cookie,如果它发现它dispalys额外的用户内容的内容。 但是当我使用上面的脚本时,它显示了页面test_cookies.html的内容,但没有附加的用户内容,这意味着它没有设置cookie。
我试着写另一个剧本这样
<?php
header("Set-Cookie:user=1");
header("Location:test_cookies.html");
?>
这个工作并设置cookie,并给出了额外的用户的内容了。 我使用
curl_setopt($ch,CURLOPT_COOKIEFILE,"cookie.txt");
curl_setopt($ch,CURLOPT_COOKIEJAR,"cookie.txt");
这是写入cookie信息的文件,但抓取的网页时,不读书也试过。 有人可以帮忙吗?
答
由于JavaScript在浏览器中进行检查,因此您应该在将输出发送到浏览器之前设置cookie。所以,你需要两个脚本结合:
$ch=curl_init();
$url="http://localhost/javascript%20cookies/test_cookies.html";
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$contents = curl_exec($ch);
curl_close($ch);
header("Set-Cookie:user=1");
echo $contents;
说明:
请注意,我们正在寻找两个转变这里:
- 数据由卷曲取出,然后
- 它被送到到浏览器。
这是一个特殊情况,您使用curl从localhost
获取内容,但在现实生活中,您将使用curl从第三个主机获取内容。
如果根据请求中是否发送了cookie,您收到的内容不同,那么您应该使用curl设置cookie。在大多数情况下,您可以将内容无需额外调整即可发送到浏览器。但在这里,您在浏览器中检查cookie 做出决定,因此您不需要第一个cookie设置,而您确实需要第二个。
,但发送一个cookie通知头意味着我不需要设置CURLOPT_COOKIE选项。对我来说似乎不好。 – lovesh 2011-05-15 08:38:18
我意识到由curl获取的内容并不取决于是否存在cookie,我更新了我的答案,因此,在通过curl获取html页面时不需要cookie,但在内容到达时您确实需要cookie在浏览器中。这就是以上所做的。我会把感受放在一边并做一个测试。 – 2011-05-15 08:46:20
@Majid Fouladpour:但这种方式我不使用卷曲来设置cookie,而是依靠标题。如果我需要使用卷曲怎么办?我使用了像CURLOPT_COOKIEFILE和CURLOPT_COOKIEJAR这样的选项,但他不工作。有没有其他出路? – lovesh 2011-05-15 08:50:36