php – cURL – 在浏览器中工作,而不是在cURL中

前端之家收集整理的这篇文章主要介绍了php – cURL – 在浏览器中工作,而不是在cURL中前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我现在已经在这项任务上苦苦挣扎了近三天,我想我缺少一些基本的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也不能这样做吗?

谢谢你的帮助 !!

问题解决了.
这是使用正确的标题的问题.
根据浏览器的报告,我完成了所有步骤,结果显示出来.

我使用以下步骤完成了每个步骤:

curl_init
curl_setopt()
..
curl_setopt()
curl_exec()
curl_close()

这样我就不得不手动设置每个请求并完成设置.它使代码更长,但更容易理解.

我对网站的想法使用一些javascript特殊代码使网站工作,所以我被所有额外的,javascript代码困扰了很多,结果是不必要的.

这完全是因为有更多的组织和遵循正确的标头设置.

此外,由于这是一个ASPX站点,我必须阅读并记住每次迭代中最后一页的VIEWSTATE和VALIDATION.这是我曾经一直得到的500内部错误服务器消息的第一个也是非常原因.

我使用Firebug和LiveHttpHeaders来合并每一步.

原文链接:https://www.f2er.com/php/134298.html

猜你在找的PHP相关文章