【发布时间】:2012-01-22 13:52:08
【问题描述】:
我需要一种通过 PHP 脚本提取网页上所有表单信息的方法。 所以我有:
$url = "http://somewebpage.com/";
我需要的信息是:
网页上所有表单的列表,以及它们的选项/属性,例如:
示例输出如下:
Form1:表单名称:“login”,动作:“login.php”,方法:“GET”
- 输入类型:“文本”,名称:“用户名”
- 输入类型:“密码”,名称:“密码”
Form2:表单名称:“login2”,动作:“login2.php”,方法:“POST”
- 输入类型:“文本”,名称:“usr”
- 输入类型:“密码”,名称:“密码”
我用下面的方法把网页的HTML内容,放入一个变量中:
// cURL
$browser_id = "some crazy browser";
$curl_handle = curl_init();
$options = array
(
CURLOPT_URL=>$url,
CURLOPT_HEADER=>true,
CURLOPT_RETURNTRANSFER=>true,
CURLOPT_FOLLOWLOCATION=>true,
CURLOPT_USERAGENT=>$browser_id
);
curl_setopt_array($curl_handle,$options);
$server_output = curl_exec($curl_handle);
curl_close($curl_handle);
然后我用它来删除标题信息,只保留 HTML 内容,否则 DOM 总是给我错误。
$server_output2 = substr($server_output, stripos($server_output, "<html"));
为了查找表单,我使用 DOM
$dom = new DomDocument;
$dom->preserveWhiteSpace = FALSE;
$dom->loadHTML($server_output2);
$params = $dom->getElementsByTagName('form'); // Find Sections
$k=0;
foreach ($params as $param){
$forms[$k][0] = $params->item($k)->getAttribute('name');
$forms[$k][1] = $params->item($k)->getAttribute('action');
$forms[$k][2] = $params->item($k)->getAttribute('method');
$k++;
}
但是我的问题是,我经常从 DOM 中收到关于未封闭标签或其他信息的错误。我不想得到这个信息。我怎样才能让它工作? 还有我当前的代码,只输出表单信息,而不是表单中的输入,我也想知道。我怎样才能使这项工作?谢谢您的帮助。 你可以在http://sourceforge.net/projects/rav/files/查看我的项目远程攻击向量(这是我需要的) 或查看我的网站:http://tamasiweb.hu
【问题讨论】:
-
将 CURLOPT_HEADER 设置为 false。它不会添加任何标题。