PHP+cURL:Error:状态信息对此页面无效,可能已损坏。
我尝试登录到PHP+cURL:Error:状态信息对此页面无效,可能已损坏。,php,curl,captcha,Php,Curl,Captcha,我尝试登录到 https://reg.viatoll.pl/PreLogin.aspx?language=po 卷曲的。关于错误,我应该得到错误验证码-波兰语:Nieprawidlowy kod weryfikacyjny,但我得到 Error: The state information is invalid for this page and might be corrupted. System.Web at System.Web.UI.ViewStateException.ThrowEr
https://reg.viatoll.pl/PreLogin.aspx?language=po
卷曲的。关于错误,我应该得到错误验证码-波兰语:Nieprawidlowy kod weryfikacyjny,但我得到
Error: The state information is invalid for this page and might be corrupted. System.Web at System.Web.UI.ViewStateException.ThrowError(Exception inner, String persistedState, String errorPageMessage, Boolean macValidationError) at...
我不知道我做错了什么。我通知您这是一个带有视图状态和事件验证的东西。如果我在Chrome中打开此页面,在发布数据之前在_uviewstate或_ueventvalidation中更改某个内容,我会得到相同的错误。
我的代码如下:
<?php
require_once('simple_html_dom.php'); // http://simplehtmldom.sourceforge.net/manual.htm
$cookie="cookie2.txt";
$url = 'https://reg.viatoll.pl/PreLogin.aspx?language=po';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.2) Gecko/20070219 Firefox/2.0.0.2');
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_COOKIE, 1);
curl_setopt($ch, CURLOPT_COOKIEJAR,$cookie);
curl_setopt($ch, CURLOPT_COOKIEFILE,$cookie);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt ($ch, CURLOPT_REFERER, $url);
$result = curl_exec($ch);
$html = str_get_html($result);
$vs = $html->find('#__VIEWSTATE')[0]->value;
$ev = $html->find('#__EVENTVALIDATION')[0]->value;
// sending data
$txtVerificationCode='asdasdas';
$txtUserName="UserName";
$txtPassword="Haselko123";
$url='https://reg.viatoll.pl/PreLogin.aspx?language=po';
$postdata = "__LASTFOCUS=&__EVENTTARGET=btnLogin&__EVENTARGUMENT=&__VIEWSTATE=".$vs."&__EVENTVALIDATION=".$ev."&txtUserName=".$txtUserName."&txtPassword=".$txtPassword."&txtVerificationCode=".$txtVerificationCode;
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6");
curl_setopt ($ch, CURLOPT_TIMEOUT, 60);
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_COOKIEJAR, $cookie);
curl_setopt ($ch, CURLOPT_COOKIEFILE, $cookie); // <-- add this line
curl_setopt ($ch, CURLOPT_REFERER, $url);
curl_setopt ($ch, CURLOPT_POSTFIELDS, $postdata);
curl_setopt ($ch, CURLOPT_POST, 1);
$result = curl_exec ($ch);
echo "POST: " . $postdata . "<br><br><br>";
echo $result;
?>
请任何人帮助:txtVerificationCode是验证码。你打算如何用cURL绕过这个问题?我想创建一个包含以下字段的站点:login、password和captcha。在我通过cURL登录后,它将创建会话和cookie。我需要它通过CRON每隔5分钟检查viatoll.pl上的余额,所以如果它设置了COOKIE,我不需要每次都登录。但主要的问题是,我得到了一个错误,但不是验证码错误的信息。如果他们想让机器人能够登录,他们本来就不会用验证码来保护这一点……问问他们是否提供了你想要的API。这是波兰网站,它的工作很糟糕。没有人知道他们为什么使用验证码。每个人都为此生气。可能这个网站是由一个学生创建的,他想向大家展示他对安全和网络设计的了解。我不相信他们有API。他们承诺在余额不足时发送短信和电子邮件,但他们没有。所以我想自己检查一下。@zgrzewka除非你已经成功地自动解决了验证码问题,否则你将无法登录。因此,在那之前,找出错误消息的错误是没有任何意义的。