将源代码发送到外部服务器

时间:2010-12-17 23:54:37

标签: javascript screen-scraping greasemonkey

我有兴趣编写一个脚本,最好是一个易于使用Greasemonkey等工具添加到浏览器上的脚本,它将页面的HTML源代码发送到外部服务器,稍后将对其进行解析并发送有用的数据到数据库。

但是,我没有看到类似的东西,我不知道如何处理这项任务。我会想象某种类型的HTTP帖子会是最好的方法,但我对这些想法完全不熟悉,而且我甚至不知道发送数据来解析它的确切位置(发送整个数据没有意义)例如,HTML文档到数据库。

基本上,我的总体目标是这样的(注意我只需要步骤1和2的帮助。我熟悉数据解析技术,我从来没有将它们应用到网络上):

  1. 用户查看特定页面
  2. 源代码通过greasemonkey或其他工具发送到服务器
  3. 将代码解析为存储在MySQL数据库中的有意义的数据。
  4. 非常感谢任何提示或帮助,谢谢!

    编辑:代码

    ihtml = document.body.innerHTML;
    GM_xmlhttpRequest({
    method:'POST',
    url:'http://www.myURL.com/getData.php',
    data:"SomeData=" + escape(ihtml)
    });
    

    编辑:当前的JS日志:

    Namespace/GMScriptName: Server Response: 200
    OK
    4
    Date: Sun, 19 Dec 2010 02:41:55 GMT
    Server: Apache/1.3.42 (Unix) mod_gzip/1.3.26.1a mod_auth_passthrough/1.8 mod_log_bytes/1.2 mod_bwlimited/1.4 FrontPage/5.0.2.2635 mod_ssl/2.8.31 OpenSSL/0.9.8e-fips-rhel5 PHP-CGI/0.9
    Connection: close
    Transfer-Encoding: chunked
    Content-Type: text/html
    
    Array
    (
    )
    
    http://www.url.com/getData.php
    

1 个答案:

答案 0 :(得分:3)

正如你对Q的评论中提到的,我不相信这是一个好主意,而且就个人而言,我会避免像瘟疫这样做的任何扩展但是......

您可以使用所有html元素上的innerHTML属性来获取该节点内的HTML - 例如body元素。然后,您可以使用AJAX HTTP(S!)请求发布数据。

您可能还需要考虑某种形式的压缩,因为某些页面可能非常大,大多数用户的下载速度都比上传速度快。

注意:innerHTML获取将以当前状态显示页面的源代码的表示,而不是从Web服务器发送的实际源 - 例如,如果您使用JS添加元素,该元素的来源将包含在innerHTML中,即使它从未通过网络发送过。

另一种方法是使用AJAX请求获取当前URL并自行发送响应。这将是发送给客户端的确切内容,但有问题的服务器将知道该页面已被提供两次(并且在一些可能导致问题的Web应用程序中 - 例如通过“按下”删除按钮两次)

最后一个建议是简单地将当前URL发送给您自己并在您自己的服务器上进行下载 - 这也可以减轻某些的安全风险,因为您无法检索非公开页面的内容

编辑:

NB: 我删除了用于追踪问题的大量虚假信息,如果您需要完整的详细信息,请查看编辑日志

PHP代码:

<?php
    $PageContents = $_POST['PageContents']
?>

GreaseMonkey脚本:

 var ihtml = document.body.innerHTML;
 GM_xmlhttpRequest({
  method:'POST',
  url:'http://example.com/getData.php',
  data:"PageContents=" + escape(ihtml),
  headers: {'Content-type': 'application/x-www-form-urlencoded'}
 });