我的cURL脚本在我的localhost上不再工作(因此请记住它以前工作)(因此它在我的外部主机上工作,因此:可能是服务器设置):
这个脚本以前在我的本地主机上运行得很好(现在仍然在我的主机上运行),没有任何变化。
- 也许我已经在本地主机上运行了这个脚本超过3000次的事实是有用的。
- 我在Windows 7上运行,使用WampServer来设置主机。
- 我可能改变了一个设置,这影响了cookie的写入。但是是哪一个呢?
- 实际问题**: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
- 附带问题:* * curl_close是否取消设置cookie?如果没有设置cookiejar选项?**
- 主要问题:* * 为什么curl不像它应该做的那样写一个cookie(在我的外部主机上写,而不是在我的本地主机上写。**
其他信息:
- 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.
5条答案
按热度按时间pkmbmrz71#
虽然这个问题有点过时了,但我今天也遇到了同样的问题,而且没有用这里的任何建议来解决它。饼干没有保存的原因很简单,就是没有接到
如果curl请求后没有调用curl_close,则不保存cookie。
我花了大约一个小时才知道...也许可以节省你的时间:-)
quhf5bfb2#
您可能在登录过程中被禁止。这将为您提供有关该问题的详细信息:
编辑:其他一些选择,你可以尝试(SSL相关解决了我的问题不止一次):
编辑2:下面的选项会给予你返回的头文件(仅用于调试)。此外,请确保cookie.txt文件被正确使用(可定位和可写入)。
我能做的就这么多了。现在去吃午饭吧!
编辑3:Cookie相关的东西:
编辑4:始终在开始时检查:
如果收到此错误,请在
php.ini
中激活curl取消注解/删除前面的;
并重新启动Web服务器。如果没有找到这一行,则需要安装curl:
对于windows或你的wampserver来说,这也一定很容易。
dgiusagp3#
我可以看出这段代码有两个错误:
您可以在创建资源和执行资源之间切换变量名称:
您发出了发布请求,但未设置内容类型,您应该执行以下操作:
sg3maiej4#
我在将脚本从PHP7迁移到PHP8时遇到此问题
在PHP8之前,如果我们不显式调用
curl_close($handle)
,cookie就不会被设置。在PHP8中,这个函数不再起作用了,我们需要调用
unset($handle);
来移除CurlHandle
对象,这样cookie文件就创建好了。mzmfm0qo5#
我的情况有两个问题:1)服务器不接受没有值的cookie 2)我没有使用CURLOPT_COOKIEFILE选项
每一个问题都是通过把它分成单独的部分来解决的,每个部分都是单独解决的。
所以我建议你把你的问题分成:1)检查是这个COOKIEFILE问题或网站-直接发送cookie值没有文件-可能是有服务器问题2)如果这将是确定的-检查文件内容可能是有问题(像在我的情况)