我一直在使用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;
}
Run Code Online (Sandbox Code Playgroud)
所以我做了一个搜索,并试图获取cookie,但失败了:
preg_match('/^Set-Cookie: (.*?);/mi', $result, $m);
echo(parse_url($m[1]));
Run Code Online (Sandbox Code Playgroud)
我也尝试用file_get_contents() - 空回显$ cookieFile.我现在检查了大约15次文件 - 这是一个777可写文件.我尝试使用file_put_contents()写入并成功,因此文件位置和/或权限中存在错误.我显然缺少一些东西,我只是看不到它.
最好的祝福 :)
小智 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');
Run Code Online (Sandbox Code Playgroud)
好的,所以我找到了解决方案。在使用 preg_match() 从 HTML 内容中匹配要抓取的链接后,您需要首先转义该链接(出于我尚不知道的原因)。我们这样做: html_entity_decode($match)