CURL不保存Cookies(PHP)

时间:2011-07-20 09:53:30

标签: php cookies curl

我一直在使用CURL(PHP)在Wordpress中登录一段时间。我想我已经尝试了一切,但似乎我错过了一些东西。我登录时无法让CURL保存我的Cookies。 奇怪的是,尽管我无法将cookie保存到文件中,但除了升级Worpdress插件(这是我目前正在处理的工作)之外,一切都或多或少都有效。我可以登录到wordpress,我甚至可以设置一个自动ugprade preg_matching链接并卷曲它 - Wordpress核心升级没有问题,但出于某种原因,当涉及到插件 - 我就是不能这样做。我昨晚在问题出现时做了很多猜测,但没有做到。现在,当我决定比较我从CURL和FireFox获得的cookie时 - 结果发现CURL没有cookie。

好的,所以我在这里设置了选项(不介意评论的内容,我一直在检查所有内容,并将它们放入......)。

$cookieFile = 'cookies.txt'; 
$channel = curl_init();

curl_setopt_array($channel, array (
    CURLOPT_SSL_VERIFYPEER => FALSE,
    CURLOPT_TIMEOUT =>  60,
    CURLOPT_FOLLOWLOCATION =>  1,
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_COOKIEFILE => $cookieFile,
    CURLOPT_COOKIEJAR => $cookieFile,
    CURLOPT_AUTOREFERER =>  true,
    CURLOPT_POSTFIELDS =>   $loginPostData,
    CURLOPT_POST =>  1,
    #CURLOPT_FRESH_CONNECT => 1
    #CURLOPT_FAILONERROR => 1
));
   # curl_setopt ($channel, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6");
#
# Shorten curl_exec for our $channel
#
function copen($openUrl, $custom = FALSE) {
global $channel;global $siteUrl;
if($custom) {$siteUrl = "";}
curl_setopt ($channel, CURLOPT_URL, $siteUrl.$openUrl);
$result = curl_exec ($channel) or die(curl_error($channel));
echo "<h3> Opening: $openUrl </h3>";
return $result;
}

所以我进行了搜索,并尝试获取Cookie,但失败了:

     preg_match('/^Set-Cookie: (.*?);/mi', $result, $m);
     echo(parse_url($m[1]));

我也尝试用file_get_contents() - 空回显$ cookieFile。我现在检查了大约15次文件 - 这是一个777可写文件。我尝试使用file_put_contents()写入并成功,因此文件位置和/或权限中存在错误。我显然缺少一些东西,我只是看不到它。

最诚挚的问候:)

4 个答案:

答案 0 :(得分:6)

对于其他人,请检查您是否使用绝对路径到Cookie文件!

'C:\瓦帕\ WWW \ cookie.txt'

而不是:

'cookie.txt'

curl_setopt($curl, CURLOPT_COOKIEFILE, 'C:\wamp\www\cookie.txt');
curl_setopt($curl, CURLOPT_COOKIEJAR, 'C:\wamp\www\cookie.txt');

答案 1 :(得分:1)

好的,我找到了解决方案。 将链接与HTML内容中的preg_match()匹配后,您需要首先转义链接(原因尚不清楚)。 我们这样做:html_entity_decode($ match)

答案 2 :(得分:1)

遇到同样的问题并在最后调用curl_close()解决了这个问题。它缺少的,没有保存cookie。

答案 3 :(得分:0)

我去年制作了一个网络机器人,这就是我使用的代码: 我记得很清楚脚本100%工作。当然,我有一个功能,检查我是否登录,如果我没有登录();

function init($username,$password,$mainurl){
    global $curl;
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_HEADER, 0);
    curl_setopt($curl, CURLOPT_POST, true);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($curl, CURLOPT_COOKIEFILE, "$username");
    curl_setopt($curl, CURLOPT_COOKIEJAR, "$username"); 

    login($curl,$username,$password,$mainurl);
}
function login($curl,$username,$password,$mainurl){
    $logindata="some_login_data";
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($curl, CURLOPT_URL, "SITE LOGIN PAGE URL");
    curl_setopt($curl, CURLOPT_POSTFIELDS, $logindata);
    return curl_exec($curl);
}