我一直在使用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()写入并成功,因此文件位置和/或权限中存在错误。我显然缺少一些东西,我只是看不到它。
最诚挚的问候:)
答案 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);
}