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