我的 localhost 后,我的cURL脚本不再 (所以请记住它之前的DID工作)(因此它可以在我的外部主机上运行,因此:它可能是服务器设置):
此脚本在我的localhost之前工作正常(它仍然在我的主机上)。没有改变。
真正的问题:cURL没有设置Cookie!什么apache模块应该用于写入cookie(在.txt文件中)?我正在运行wampserver。
请注意我已经在使用:
curl_setopt($curlTable, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt($curlTable, CURLOPT_COOKIEFILE, 'cookie.txt');
那个php.ini是:
extension=php_curl.dll is uncommented
其他信息:
的phpinfo()
curl
cURL support enabled
cURL Information 7.21.7
Age 3
Features
AsynchDNS Yes
Debug No
GSS-Negotiate Yes
IDN No
IPv6 Yes
Largefile Yes
NTLM Yes
SPNEGO No
SSL Yes
SSPI Yes
krb4 No
libz Yes
CharConv No
Protocols dict, file, ftp, ftps, gopher,
http, https, imap, imaps, ldap, pop3,
pop3s, rtsp, scp, sftp, smtp, smtps, telnet, tftp
Host i386-pc-win32
SSL Version OpenSSL/0.9.8r
ZLib Version 1.2.5
libSSH Version libssh2/1.2.7
目前正在使用:
preg_match('/name="csrf" value="(.*?)"/', $getTokenCurlData, $token);
$postFields = array(
'user' => $userNum,
'paswoord' => $userPass,
'login' => 'loginform',
'csrf' => $token[1]);
// 'user='.$userNum.'&paswoord='.$userPass.'&login=loginform&csrf='.$token[1]
$postData = http_build_query($postFields);
$curlTable = curl_init();
curl_setopt($curlTable, CURLOPT_URL, 'link');
curl_setopt($curlTable, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt($curlTable, CURLOPT_COOKIEFILE, 'cookie.txt');
curl_setopt($curlTable, CURLOPT_ENCODING, 'gzip');
curl_setopt($curlTable, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curlTable, CURLOPT_POST, true);
$tableData = curl_exec($curlTable);
if (!$tableData) echo 'post problem?'.$tableData;
if ($tableData == false)
{
echo 'Curl error: ' . curl_error($curlTable);
}
curl_close($curlTable);
// Here I further process my data.
答案 0 :(得分:10)
虽然这个问题有点过时,但我今天遇到了同样的问题,并没有解决这里的任何建议。没有保存cookie的原因只是缺少
的调用curl_close()
如果curl请求后没有调用curl_close cookie未保存。
花了我一个小时才发现....也许可以节省你的时间: - )
答案 1 :(得分:7)
可能您在登录过程中被禁止了。这将为您提供有关该问题的更多信息:
// change
// if (!$siteSource) echo 'Help!';
// to
if ($siteSource === false)
{
echo 'Curl error: ' . curl_error($curl);
}
编辑:您可以尝试其他一些选项(SSL相关解决了我的问题):
curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.0.3705; .NET CLR 1.1.4322; Media Center PC 4.0)');
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_VERBOSE, 1);
// following is very important
// TRUE to follow any "Location: " header that the server sends
// as part of the HTTP header (note this is recursive, PHP will follow
// as many "Location: " headers that it is sent, unless CURLOPT_MAXREDIRS is set).
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
编辑2:以下选项将为您提供返回的标题(仅用于调试)。除了确保cookie.txt正确使用(可定位和可写)。
curl_setopt($curl, CURLOPT_HEADER, true);
这就是我能为自己做出的贡献。现在吃午饭!
编辑3:Cookie相关内容:
$cookie_file = PATH_TO_YOUR_COOKIE_FILE . '/cookie.txt';
if (! file_exists($cookie_file) || ! is_writable($cookie_file))
{
echo 'Cookie file missing or not writable.';
exit;
}
// you already added the following, I put it again just to remark their utility
curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_file);
curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie_file);
编辑4:始终在开头检查:
if ( ! extension_loaded('curl'))
{
echo "You need to load/activate the curl extension.";
}
如果您收到此错误,请在php.ini
中激活curl,取消注释/移除前;
windows:
;extension=php_curl.dll // or curl.dll
linux:
;extension=php_curl.so // or curl.so
并重新启动Web服务器。如果你没有找到这一行,那么你需要安装curl:
// ubuntu
sudo apt-get install php5-curl
// centos
sudo yum install php5-curl
对于Windows或您的wampserver,它也必须很容易。
答案 2 :(得分:1)
我可以看到有两件事与该代码有关:
您可以在创建资源和执行资源之间切换变量名称:
$curl = curl_init(); // $curl
$siteSource = curl_exec($curlTable); // $curlTable
你发了一个帖子请求,但没有设置内容类型,你应该这样做:
$postFields = array(
'user' => $userNum,
'paswoord' => $userPass,
'login' => 'loginform'
);
// This ensures all strings are properly encoded
$postData = http_build_query($postFields);
// ...
// curl *should* do this by itself, but best to do it explicitly
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
'Content-Type: application/x-www-form-urlencoded',
'Content-Length: '.strlen($postData),
'Connection: close'
));
答案 3 :(得分:-1)
在我看来,有两个问题: 1)服务器没有接受没有值的cookie 2)我没有使用CURLOPT_COOKIEFILE选项
每个问题都可以通过将它分成不同的部分来解决,并自行解决每个问题。
所以我建议你分开你的问题: 1)检查是这个COOKIEFILE问题或网站 - 直接发送cookie值没有文件 - 可能是服务器问题 2)如果这样可以 - 检查文件内容可能有问题(比如在我的情况下)