自动化 HTTP 请求

Automating HTTP Requests

我与一个团队合作,他们在公司数据库中获取用户的唯一方法是在浏览器中浏览并填写大约 5 页的 Web 表单。真正残酷的东西。我已经用 VBScript、Java(w/Selenium WebDriver)和 iMacro 开发了 Web 自动化脚本,但所有这些解决方案都。它们还依赖于浏览器,我正试图摆脱它。

我正在寻找一个新平台,可能是一些脚本 technique/language 可以让我发出 HTTP 请求并读取 HTTP 响应,然后围绕该平台构建我的脚本。该脚本将对 HTTP 响应执行计算,使用文件 I/O 并使用此数据发出进一步的 HTTP 请求。再一次,我只是在这里吐口水。如果其他人有更好的解决方案,我洗耳恭听!

我要问你的问题是:接受团队的限制(只读数据库访问),你将如何处理解决方案以及你将使用什么 tools/languages/platforms 来做到这一点?

欢迎广泛而模棱两可的回答。感谢您的时间。

我会开始研究 NodeJS 作为一个平台。 HTTP library is an incredibly powerful method for writing applications that need to make multiple http requests with unusual structure and it can communicate easily with a browser or basically anything else you could possibly need. Look at using the FileSystemclass如果需要做文件I/O。

如果您想真正花哨并使用 websockets to build a dynamic webapp that you can use as a front-end for your tool, you could even do that,那么这里有很大的灵活性。

我同意@Grisk 关于使用 NodeJS/ioJS 作为平台的观点。它是一款为 I/O 全新设计的强大工具,非常适合解决您的问题。此外,节点社区非常活跃,npm 是 nodejs 包管理器,托管了数以千计的易于访问的模块。为了避免任何未来的混淆:不要将 NodeJS 误认为是一种语言或后端框架;它是构建在 Google 的 V8 引擎之上的原生 javascript 解释器以及一组构建强大 I/O 应用程序的内置模块。在线阅读有关节点的信息。

至于你的具体问题,我想你有两个选择:

  1. 使用虚拟 cookie 假装是浏览器
  2. 像您一直做的那样以编程方式浏览网站。

对于前一个选项,您需要手动确定在每个页面上提交表单时将哪些 cookie 发送到服务器,然后在您的脚本中生成这些 cookie 并将它们包含在 http 请求中。查看 nodejs http documentation 以获取有关自定义 header 请求的更多信息。

您 header 需要看起来像这样:

var headers = {
    'host': < website host address here > ,
    'origin' : <website origin here>
    'referer' : <website origin here>
    'User-Agent': 'Opera/9.52 (X11; Linux i686; U; en)',
    'Cookie': <cookie sent over by server here>
}

我最近遇到了 node-icloud 库,它使用我上面描述的第一种方法来提供对一个人的 icloud 帐户的编程访问。我强烈建议通读它的代码以了解它是如何工作的 here

此外,我建议您阅读有关 http headers here

的内容

对于第二个选项,查看 phantomjs 和 zombiejs。 Phantom 很好,因为它无需浏览器即可运行。我不确定这两个库的速度与您已经在做的相比如何,但它们值得测试。

最后一件事:我建议构建自定义 (JSON)DSL 以自动与网页交互,这样您就可以非常轻松地重新设计浏览器交互工作流。

此外,如果您选择使用 nodejs,了解节点流及其事件循环背后的细节将大有裨益。

祝你好运!