Javascript 将源代码发送到外部服务器
我感兴趣的是编写一个脚本,最好是一个易于使用Greasemonkey等工具添加到浏览器上的脚本,它可以将页面的HTML源代码发送到外部服务器,然后在那里对其进行解析,并将有用的数据发送到数据库 然而,我还没有看到任何类似的情况,我也不知道如何完成这项任务。我想某种HTTP post可能是最好的方法,但我对这些想法完全陌生,甚至不知道将数据发送到何处进行解析(例如,将整个HTML文档发送到数据库是没有意义的) 因此,基本上,我的总体目标是这样的(请注意,我只需要步骤1和步骤2的帮助。我熟悉数据解析技术,只是从未将它们应用到web):Javascript 将源代码发送到外部服务器,javascript,screen-scraping,greasemonkey,Javascript,Screen Scraping,Greasemonkey,我感兴趣的是编写一个脚本,最好是一个易于使用Greasemonkey等工具添加到浏览器上的脚本,它可以将页面的HTML源代码发送到外部服务器,然后在那里对其进行解析,并将有用的数据发送到数据库 然而,我还没有看到任何类似的情况,我也不知道如何完成这项任务。我想某种HTTP post可能是最好的方法,但我对这些想法完全陌生,甚至不知道将数据发送到何处进行解析(例如,将整个HTML文档发送到数据库是没有意义的) 因此,基本上,我的总体目标是这样的(请注意,我只需要步骤1和步骤2的帮助。我熟悉数据解析
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
正如在你的Q评论中提到的,我不认为这是一个好主意,就我个人而言,我会避免任何类似瘟疫的扩展,但是 您可以使用所有html元素上可用的
innerHTML
属性来获取该节点内的html,例如body元素。然后可以使用AJAX HTTP请求发布数据
您可能还需要考虑某种压缩形式,因为某些页面可以非常大,大多数用户的下载速度比上传速度更好。 注意:
innerHTML
获取将以当前状态显示页面的源代码的表示,而不是从web服务器发送的实际源代码-例如,如果使用JS添加元素,则该元素的源代码将包含在innerHTML
中,即使它从未通过web发送
另一种方法是使用AJAX请求获取当前URL并向自己发送响应。这正是发送给客户机的内容,但相关服务器会意识到该页面被服务了两次(在某些web应用程序中,可能会导致问题,例如“按”两次删除按钮)
最后一个建议是,只需将当前URL发送给您自己,然后在您自己的服务器上进行下载—这还可以减轻一些安全风险,因为您无法检索非公共页面的内容
编辑:
NB:我删除了许多用于跟踪问题的虚假信息,如果需要完整详细信息,请查看编辑日志
PHP代码:
<?php
$PageContents = $_POST['PageContents']
?>
这听起来像是用于广告或类似行为定位的东西-请注意,所涉及的页面来源可能包含敏感信息(电子邮件、银行记录等),我个人会完全避免这样做,但如果你坚持这样做,确保你的代码是非常安全的。我应该提到,我只会在一个特定的网站上使用这个脚本,它不会包含任何敏感信息,只是我希望能够轻松解析的数据。有人能解释一下通过Ajax或其他工具使用HTTP来实现这一点的可能性吗?我到处寻找例子,我发现最好的是通过URL信息填写表单的脚本,我认为这不适用于整个页面的源代码。谢谢!Greasemonkey的东西非常适合我的需要。我理解GM_xmlhttpRequest对象中的字段,但是您能告诉我MyScript.php是如何接收信息的吗?我已经使用该代码有一段时间了,我遇到了一个问题。我认为这是因为$\u POST无法查找“SomeData”条目,因为它从未在GM脚本中定义过。我在表单中寻找了一些与name参数等价的参数,但似乎没有。我是否需要其他方法来识别来自GM脚本的数据,或者我只是做了一些完全错误的事情?当你发布数据时,数据的格式应该与URL参数相同,例如
name1=value1&name2=value2
-PHP可以查看$\u POST['name1']
,$\u POST['name2']
变量。如果您可以发布您在GM AJAX调用和PHP中使用的代码,我们就可以发现问题了。我唯一的代码就是您提供的GM脚本的一部分,MyScript.PHP以及一些添加的数据库插入/查询,只是为了测试脚本。我是否在设置参数时遗漏了一些步骤?
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'}
});