如何使用PHP从HTML中提取所有表单信息

时间:2011-12-17 11:10:38

标签: php forms parsing dom

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

  

$ url =“http://somewebpage.com/”;

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

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

  1. 输入类型:“text”,名称:“usrname”
  2. 输入类型:“密码”,名称:“pass”
  3. 表格2:表格名称:“login2”,操作:“login2.php”,方法:“POST”

    1. 输入类型:“text”,名称:“usr”
    2. 输入类型:“密码”,名称:“pwd”
    3. 我使用以下方法将网页的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

1 个答案:

答案 0 :(得分:1)

好吧,下载这个php lib

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

课程用法:

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

    $snoopy = new Snoopy;

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

希望有所帮助