使用PHP的cURL lib中的POST不发送

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了使用PHP的cURL lib中的POST不发送脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试通过cURL用 PHP发送POSTDATA,我认为帖子没有发送

$ch = curl_init();
curl_setopt($ch,CURLOPT_HEADER,true);
curl_setopt($ch,CURLOPT_HTTPHEADER,$header);
curl_setopt($ch,CURLINFO_HEADER_OUT,CURLOPT_SSL_VERIFYPEER,0);
curl_setopt($ch,CURLOPT_RETURNtransfer,1);
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,false);
curl_setopt($ch,CURLOPT_POST,CURLOPT_POSTFIELDS,$data);
curl_setopt($ch,CURLOPT_URL,$url);
$t = curl_exec($ch);

知道为什么,但我正在尝试登录页面,当我转储$t时,我总是看到表单,curl_error是空的,我该怎么做才能调试这个?试图登录页面不是我的!

我有一个模拟cURL的本地表单,它可以:

<form action="$url" method="POST">
  <input type="hidden" name="username" value="$uspw" />
  <input type="hidden" name="password" value="$uspw" />
  <input type="submIT" value="Send" />
</form>

登录$url!这是我在cURL中发送给POSTFIELDS的$data

$data = array('username' => $uspw,'password' => $uspw);

..用户和密码是一样的

标题收到:

HTTP/1.1 100 Continue

HTTP/1.1 200 OK
Date: Sun,25 Nov 2012 05:23:19 GMT
Server: apache
Cache-Control: no-cache="set-cookie"
Content-Length: 4822
Set-Cookie: SESSIONID_portalApp=xxxxxx!-xxx!xxx; path=/
Content-Language: en
X-Powered-By: Servlet/2.4 JSP/2.0
Content-type: text/htML; charset=ISO-8859-1

在此之后我再次收到所有表格……

$data = array('username' => $uspw,'password' => $uspw);


$header = array('Origin: xxx','Content-Type: application/x-www-form-urlencoded','Connection: keep-alive','Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3','Cache-Control: max-age=0','Except:','Accept:text/html,application/xhtml+XMl,application/xml;q=0.9,*/*;q=0.8','Accept-Charset:ISO-8859-1,'Accept-Encoding:gzip,deflate,sdch','Accept-Language:es-ES,es;q=0.8',);

$ch = curl_init();
curl_setopt($ch,1);

curl_setopt($ch,CURLOPT_FORBID_REUSE,CURLOPT_FRESH_CONNECT,CURLOPT_AUTOREFERER,CURLOPT_USERAGENT,"Mozilla/5.0 (Windows NT 5.1) Applewebkit/537.11 (KHTML,like Gecko) Chrome/23.0.1271.64 Safari/537.11");
curl_setopt($ch,CURLOPT_cookiejar,'xxx.txt');
curl_setopt($ch,CURLOPT_REFERER,'xxxx');
curl_setopt($ch,$url);
$t = curl_exec($ch);

谢谢!

解决方法

看起来你正试图在没有浏览器的情况下登录第三方系统.

这种情况极不可能,因为你没有做他们期望的事情,即建立一个会话cookie.虽然您可能正在正确登录,但远程站点可能会再次向您显示该表单,因为您的cookie中没有任何内容告诉它在重定向时不这样做.标题解释了这个:

为cURL创建一个cookie文件(使用像tempnam()这样的东西)并使用CURLOPT_COOKIEJAR指令告诉cURL它所在的位置.您还可以从浏览器中获取现有Cookie,然后尝试进行故障排除.

在初始化cURL之前添加它:

$cookieFile = tempnam('/dev/shm','curlCookie_');

然后告诉cURL使用它:

curl_setopt($ch,$cookieFile);

我建议/ dev / shm因为它在重新启动时被删除,你可以在任何你有能力的地方创建它.不再需要时,请小心将它们移除.您还可以更改前缀,以使单个文件更容易与单个请求(时间戳,PID等)关联,便于调试.

还要确保将用户代理字符串设置为远程站点已知的已知内容.请记住,它需要一个浏览器 – 所以你必须确保你的行为像一个.正如评论中所建议的那样,将CURLOPT_FOLLOWLOCATION设置为true可能是一个好主意.

如果这不起作用,请在浏览器中正常执行操作并仔细查看页面.可能需要JS才能正确构建会话..在这一点上,你使用cURL就好运了.

脚本宝典总结

以上是脚本宝典为你收集整理的使用PHP的cURL lib中的POST不发送全部内容,希望文章能够帮你解决使用PHP的cURL lib中的POST不发送所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。