php – Curl返回空字符串
我有一个相当奇怪的问题.我可以访问网站(电子邮件和密码).抱歉,我无法向您显示此网站.我需要从它的内容中获取一些信息.
而不是我会告诉你我的代码. //I form string of post request $fields=array( 'name_of_login_field' => urlencode('test@gmail.com'),'name_of_password_field' => urlencode('pass') ); foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; } $fields_string=rtrim($fields_string,'&'); 然后我通过curl发送它. $curlURL="URL"; if( $curl = curl_init() ) { curl_setopt($curl,CURLOPT_URL,$curlURL); curl_setopt($curl,CURLOPT_RETURNTRANSFER,true); curl_setopt($curl,CURLOPT_CUSTOMREQUEST,"POST"); curl_setopt($curl,CURLOPT_TIMEOUT,10); curl_setopt($curl,CURLOPT_HEADER,false); curl_setopt($curl,CURLOPT_POSTFIELDS,$fields_string); curl_setopt($curl,CURLOPT_USERAGENT,"mozilla/5.0 (ipad; cpu os 7_0_4 like mac os x) applewebkit/537.51.1 (khtml,like gecko) version/7.0 mobile/11b554a safari/9537.53"); $out = curl_exec($curl); var_dump($out); //var_dump($out); curl_close($curl); } 站点具有带两个输入的表单(登录密码).它还有一个带有名称的提交按钮和一些带名称的隐藏输入 – 重定向. if( $curl = curl_init() ) { curl_setopt($curl,CURLOPT_FOLLOWLOCATION,like gecko) version/7.0 mobile/11b554a safari/9537.53"); $out = curl_exec($curl); var_dump($out); //var_dump($out); curl_close($curl); } 随着卷曲$out是错误的.如果我用CURLOPT_FOLLOWLOCATION删除字符串$out是空字符串. curl -l desired-site.com 它只返回没有标题的内容. curl -s -D - desired-site.com -o /dev/null 它返回了这个标题. HTTP/1.1 200 OK Server: nginx/1.2.1 Date: Thu,07 May 2015 08:20:23 GMT Content-Type: text/html Transfer-Encoding: chunked Connection: keep-alive X-Powered-By: PHP/5.4.4-14+deb7u11 Set-Cookie: PHPSESSID=randon_number_of_letters; expires=Sat,09-May-2015 12:07:03 GMT; path=/ Expires: Thu,01 Jan 1970 00:00:01 GMT Cache-Control: no-cache Pragma: no-cache Cache-Control: private Cache-Control: no-store,must-revalidate,post-check=0,pre-check=0 Pragma: no-cache Last-Modified: Thu,01 Jan 1970 00:00:01 GMT 它能以某种方式帮助吗? preg_match('/PHPSESSID=([A-Za-z0-9]+)/',$out,$matches); $cookie="Cookie: PHPSESSID=".$matches[1]; 然后添加到curl: curl_setopt($curl1,CURLOPT_COOKIEFILE,$cookie); curl_setopt($curl1,CURLOPT_COOKIEJAR,$cookie); 我做了另一个连接:$curl1 = curl_init() 解决方法
这就是我在评论中的讨论中提出的建议.它将cookie存储在一个文件中并发出两个请求.只需打开表单页面并将cookie保存在cookie罐中.第二个请求发布数据.你可能想尝试一下.
$jar = tempnam('/tmp','cookie'); // create temporary file $curl = curl_init($url_1); // open form page curl_setopt($curl,true); curl_setopt($curl,$jar); curl_exec($curl); curl_close($curl); $curl = curl_init($url_2); // post data curl_setopt($curl,CURLOPT_POST,$fields_string); curl_setopt($curl,false); curl_setopt($curl,$jar); $out = curl_exec($curl); curl_close($curl); unlink($jar); // delete temporary file (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |