使用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文件(使用像 在初始化cURL之前添加它: $cookieFile = tempnam('/dev/shm','curlCookie_'); 然后告诉cURL使用它: curl_setopt($ch,$cookieFile); 我建议/ dev / shm因为它在重新启动时被删除,你可以在任何你有能力的地方创建它.不再需要时,请小心将它们移除.您还可以更改前缀,以使单个文件更容易与单个请求(时间戳,PID等)关联,便于调试. 还要确保将用户代理字符串设置为远程站点已知的已知内容.请记住,它需要一个浏览器 – 所以你必须确保你的行为像一个.正如评论中所建议的那样,将CURLOPT_FOLLOWLOCATION设置为true可能是一个好主意. 如果这不起作用,请在浏览器中正常执行操作并仔细查看页面.可能需要JS才能正确构建会话..在这一点上,你使用cURL就好运了. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |