我试图通过curl访问登录表单。问题是表单有2个隐藏字段。其中一个有价值而另一个没有价值。
这样的事情:
<form name=form id=form method=POST action="login.php">
<input type=text name=user id=user value="">
<input type=password name=pass id=pass>
<input type=submit value="OK" id=sendButton name="sendButton">
<input type=hidden name=pass2>
<input type=hidden name=token value="7b8b7d712273aa254e03ea04a30322ab">
</form>
每次刷新时都会更改令牌的值。 一旦发布,Live http标题给了我这个:
user=test&pass=&login=OK&pass2=7c7e36071354b4ecde365b315ffa4406&token=
正如您所看到的,现在已经填充了pass2,而令牌则没有。那是为什么?
我尝试在发布之前获取令牌值并使用参数发送。但是当我发布令牌的价值改变了。
以下是我的表现:
$url = 'http://www.myurl.com/login.php';
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_REFERER, $url);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
$content = curl_exec($ch);
$doc = new DOMDocument();
$doc->loadHTML($content);
$tags = $doc->getElementsByTagName('input');
foreach ($tags as $tag) {
if($tag->getAttribute('name') === 'token') {
$token = $tag->getAttribute('value');
}
}
foreach ($tags as $tag) {
if($tag->getAttribute('name') === 'pass2') {
$pass2 = $tag->getAttribute('value');
}
}
$com = 'OK';
$postdata = 'user='.$user.'&pass='.$pass.'&sendButton='.$com.'&pass2='.$pass2.'&token='.$token;
curl_setopt ($ch, CURLOPT_POSTFIELDS, $postdata);
curl_setopt ($ch, CURLOPT_POST, 1);
$result = curl_exec ($ch);
echo $result;
好吧,不工作。 如果在帖子之后生成了pass2字段的值,因为我提到了实时http返回的内容。是否可能是问题?如果是这样,有没有办法解决这个问题?