我现在已经在这项任务上苦苦挣扎了近三天,我想我缺少一些基本的cURL技能.
我从:
在IE的F12中,我在第一页上看到2个POST :(我注意到第一个是获得302应该是重定向,而使用cURL我只获得200)
填写验证码:
在第二页(在验证码之后):
交通:
这是我的代码(我不能继续使用它,因为它不适用于早期阶段):
我构建了一个特殊的表单,通过GET(使用cURL)提交到我自己的页面,然后访问该网站:
$id=$_GET['id']; // getting the biznumber $humanCode=$_GET['nobot']; $curl = curl_init(); curl_setopt ($curl,CURLOPT_URL,"https://www.*******.******.***"); // setting some https to be able to access the website from my local computer. curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,true); curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,2); curl_setopt($curl,CURLOPT_CAINFO,"c:/xampp/htdocs/CAcerts/curl-ca-bundle.crt"); // I know the values for the ASPX vars like __EVENTTARGET,__EVENTARGUMENT,__VIEWSTATE are arbitrary now. I need to take care of that but I don't yet know how. $postarr= array ( "__EVENTTARGET"=>"","__VIEWSTATE=" =>"%2FwEPDwULLTEzMzI2OTg4NDYPZBYCZg9kFgQCBA8PZBYCHgdvbmNsaWNrBQxnb1RvTWl2emFrKClkAgYPD2QWAh8ABQxnb1RvTWl2emFrKClkZM6iZZ0Qaf2CpfXoJJdZ0IqaWsDO","__EVENTARGUMENT=" =>"","__EVENTVALIDATION" =>"%2FwEWBQKgysLGCwL2r7SGDQLh4ri%2BAwLWws7NDwLWwpLPD%2F1HuCAFYzs2seaziWbYEXjDfigP","hidUrlFileIshurim"=>"https%3A%2F,"cod"=>"3322" ); $fields_string=''; foreach($postarr as $key=>$value) { $fields_string .= $key.'='.$value.'&'; } rtrim($fields_string,'&'); curl_setopt($curl,CURLOPT_POST,1); curl_setopt($curl,CURLOPT_POSTFIELDS,$fields_string); curl_setopt($curl,CURLOPT_TIMEOUT,10); curl_setopt ($curl,CURLOPT_USERAGENT,"User-Agent Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; MAAU)"); // I made a cookie file and it seems to work $cookiefile = "d:/cookie.txt"; curl_setopt($curl,CURLOPT_COOKIEJAR,$cookiefile); curl_setopt($curl,CURLOPT_COOKIEFILE,$cookiefile); curl_setopt($curl,CURLOPT_FRESH_CONNECT,CURLOPT_FOLLOWLOCATION,1); curl_setopt($curl,CURLOPT_HEADER,1); // DO NOT RETURN HTTP HEADERS curl_setopt($curl,CURLOPT_RETURNTRANSFER,1); $temp=curl_exec($curl); $info = curl_getinfo($curl); $html = mb_convert_encoding($temp,'HTML-ENTITIES','utf-8'); echo "ERRCODE: ".curl_error($curl); echo '<br /><br />'; echo "INFO : "; print_r($info); echo '<br /><br />'; $httpcode = curl_getinfo($curl,CURLINFO_HTTP_CODE); echo "CODE: ".$httpcode; echo '<br /><br />'; echo "CODE: ".$httpcode; echo '<br /><br />'; echo "VARS: ".$vars; echo '<br /><br />'; //echo $html; curl_setopt ($curl,"https://www.*******.******.***"); curl_setopt($curl,0); echo "<br /><br /><b>2nd</b><br /><br />"; $temp=curl_exec($curl); $info = curl_getinfo($curl); $html = mb_convert_encoding($temp,'utf-8'); echo "ERRCODE: ".curl_error($curl); echo '<br /><br />'; echo "INFO : "; print_r($info); echo '<br /><br />'; echo $html;
甚至无法开始工作.它首先返回200 OK,而不是302,有时我也得到500.
我知道ASPX变量可能实际上是至关重要的,但是如果我的浏览器可以制作这些变量并将它们发送到服务器,那么cURL也不能这样做吗?
谢谢你的帮助 !!
问题解决了.
这是使用正确的标题的问题.
根据浏览器的报告,我完成了所有步骤,结果显示出来.
原文链接:https://www.f2er.com/php/134298.html这是使用正确的标题的问题.
根据浏览器的报告,我完成了所有步骤,结果显示出来.
我使用以下步骤完成了每个步骤:
curl_init curl_setopt() .. curl_setopt() curl_exec() curl_close()
这样我就不得不手动设置每个请求并完成设置.它使代码更长,但更容易理解.
我对网站的想法使用一些javascript特殊代码使网站工作,所以我被所有额外的,javascript代码困扰了很多,结果是不必要的.
这完全是因为有更多的组织和遵循正确的标头设置.
此外,由于这是一个ASPX站点,我必须阅读并记住每次迭代中最后一页的VIEWSTATE和VALIDATION.这是我曾经一直得到的500内部错误服务器消息的第一个也是非常原因.
我使用Firebug和LiveHttpHeaders来合并每一步.