0

我想自动填写一个 html 表单并提交表单并显示结果。我使用了从这里获得的以下代码。

<?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 来测试这段代码。

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

当我浏览 my.php 时,它显示登录页面,其中用户名字段已填写,密码字段未填写。根据代码,预期的结果是,它应该返回成功登录的页面,因为我提供了正确的用户名和密码。curl_errno 也返回 0。这意味着没有发生错误。那为什么我不能得到预期的结果?以及为什么填写了用户名字段但未填写密码字段?

4

1 回答 1

1

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

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

于 2013-05-18T17:27:21.890 回答