如何使用curl自动填充和提交html表单

时间:2013-05-18 17:07:49

标签: php forms curl

我想自动填写html表单并提交表单并显示结果。我使用下面的代码来自here

<?php
//create array of data to be posted
$post_data['email'] = 'myemail';
$post_data['pass'] = 'mypassword';

//traverse array and prepare data for posting (key1=value1)
foreach ( $post_data as $key => $value) {
    $post_items[] = $key . '=' . $value;
}

//create the final string to be posted using implode()
$post_string = implode ('&', $post_items);

//create cURL connection
$curl_connection = 
  curl_init('http://m.facebook.com/');

//set options
curl_setopt($curl_connection, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($curl_connection, CURLOPT_USERAGENT, 
  "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");
curl_setopt($curl_connection, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl_connection, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl_connection, CURLOPT_FOLLOWLOCATION, 1);

//set data to be posted
curl_setopt($curl_connection, CURLOPT_POSTFIELDS, $post_string);
//perform our request
$result = curl_exec($curl_connection);

print $result;
//show information regarding the request
echo curl_errno($curl_connection) . '-' . 
                curl_error($curl_connection);

//close the connection
curl_close($curl_connection);
?>

我使用Facebook移动网站和Gmail来测试此代码。

我将这些网站的登录页面的网址放在curl_init函数中,将登录页面的用户名和密码字段的name属性值赋予$ post_data数组的密钥,并将此代码保存为my.php文件并将其放入本地机器中的xampp htdocs目录。

当我浏览my.php时,它会显示填充了用户名字段的登录页面,并且未填写密码字段。根据代码,预期的结果是,它应该返回成功记录的页面,因为我提供了正确的用户名和密码。 curl_errno也返回0.表示没有发生错误。那为什么我不能得到预期的结果呢?为什么填写用户名字段时,为什么没有填写密码字段?

1 个答案:

答案 0 :(得分:1)

检查http://m.facebook.com/处的代码,我看到有些隐藏字段可能(应该)尝试发送。通常那些是为了防止自动POST。

首先获取http://m.facebook.com/并使用一些DOM解析器获取隐藏字段,并构建查询以将其发布到操作网址。