【问题标题】:How to extract all form info from HTML with PHP如何使用 PHP 从 HTML 中提取所有表单信息
【发布时间】:2012-01-22 13:52:08
【问题描述】:

我需要一种通过 PHP 脚本提取网页上所有表单信息的方法。 所以我有:

$url = "http://somewebpage.com/";

我需要的信息是:
网页上所有表单的列表,以及它们的选项/属性,例如:
示例输出如下:

Form1:表单名称:“login”,动作:“login.php”,方法:“GET”

  1. 输入类型:“文本”,名称:“用户名”
  2. 输入类型:“密码”,名称:“密码”

Form2:表单名称:“login2”,动作:“login2.php”,方法:“POST”

  1. 输入类型:“文本”,名称:“usr”
  2. 输入类型:“密码”,名称:“密码”

我用下面的方法把网页的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。它不会添加任何标题。

标签: php forms parsing dom


【解决方案1】:

好吧,下载这个 php 库

http://sourceforge.net/projects/snoopy/

类用法:

    $uri = "http://anysite.com/form";

    $snoopy = new Snoopy;

    if($snoopy->fetchform($uri)){
        $result = $snoopy->results;
    }
    echo $result; 

希望对你有帮助

【讨论】:

  • 谢谢,听起来不错,虽然对于我的项目的特定目的,我需要它尽可能轻量级,而且我不想使用另一个库,我希望所有代码都在我的一个 index.php 文件,并且它不包含太多的代码行。但这很有帮助,所以我必须感谢你,我会查看源代码,也许会利用一些东西。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多