php cURL - 发布隐藏字段的表单

时间:2016-11-30 22:56:28

标签: php curl hidden-field

我试图通过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返回的内容。是否可能是问题?如果是这样,有没有办法解决这个问题?

0 个答案:

没有答案