CURL Doesn't Save Cookies (PHP)


CURL Doesn't Save Cookies (PHP)

我用CURL (PHP)登录Wordpress已经有一段时间了。我想我什么都试过了,但似乎还是漏掉了什么。当我登录时,我不能让CURL保存我的Cookies。奇怪的是,即使我不能保存cookie文件,一切仍然或多或少地工作,除了升级wordpress插件(这是我目前正在工作)。我可以登录wordpress,我甚至可以设置一个自动升级preg_匹配链接并在其上滚动- 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()写入它并成功,因此文件位置和/或权限有错误。我显然漏掉了什么,只是我看不见而已。

敬礼:)

对于其他一些检查是否使用绝对路径到cookie文件!

"C: ' wamp ' 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');

遇到同样的问题,并通过在最后调用curl_close()来解决它。

好了,我找到解决办法了。在用HTML内容中的preg_match()匹配要爬行的链接之后,首先需要转义该链接(原因我还不知道)。html_entity_decode($match)

嗯,我做了一个网络机器人去年,这是我使用的代码:我记得很清楚,剧本100%有效。当然,我有一个函数,检查我是否登录,如果我没有那么login();

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);
}