使用 curl 自动化 Web 请求?

Som*_*DOS 13 web curl

我有一些必须在工作中使用的“公司”系统。其中一些很糟糕,有框架、弹出窗口等。

我正在考虑使用 curl 或类似的东西自动化一些东西。我需要登录,点击超链接,设置一些数据,然后他们做一些发布。

是否可以使用卷曲?或者我会更好地使用 Selenium 之类的东西吗?

Gil*_*il' 16

对于下载页面内容的简单情况,请使用curlwget。两者都是旨在通过 HTTP 下载文件的命令行工具,并且有很多选项。就您而言,您可能需要让这些工具看起来更像浏览器;lutzky 的回答penguin359 的回答提到了一些在这方面有用的 curl 和 wget 选项。

有时,当您需要登录时,首先在 Web 浏览器中手动登录,然后导出 Web 浏览器的 cookie(诸如allcookiesExport Cookies for Firefox等扩展程序可以提供帮助)要容易得多

如果您需要解析某些页面或帖子表单的内容,您可能需要比 curl 和 wget 更高级的工具。一些很好的工具有 Perl with LWP(libwww) and HTML::TreeBuilder(HTML-Tree)或 Python with standard libraries(特别是httplibandhtmllib)。

要与网站进行更复杂的交互,请参考 Perl 的WWW::Mechanize。这个 Perl 库定义了像 Web 浏览器一样与网站交互的高级函数,包括 POST、表单、cookie,但不包括 Javascript。如果 Perl 不是你的菜,这个库在其他语言中有类似功能的模仿,比如Python mechanizeRuby Mechanize

最后,当您需要Javascript 时,通常的方法是使用由浏览器自动化框架驱动的 Web 浏览器。SeleniumWatir是流行的选择;另请参阅除了 SeleniumRC 之外,还有什么好的工具可以获取网页,包括由 JavaScript 后期绘制的内容?


pen*_*359 14

是的,使用 curl 完全有可能。最重要的是在使用 curl 和--cookie-jar. 您还可以根据需要发布表单数据。我通常使用名为 Live HTTP Headers 的 Firefox 附加组件来捕获浏览网站时发生的情况。它将记录任何标题,但也会记录任何表单帖子,这在尝试弄清楚如何处理 curl 时非常有用。我已经写的bash脚本自动化各种卷曲调用和使用管道和临时文件(礼节mktemp)做网页上的一些有限的处理,但是如果不得不做很多网页的处理,我通常切换到Perl,以libwww的。


lut*_*zky 6

我最喜欢的是wget,所以我会举一个例子。您想要做的是尽可能接近地复制浏览器会话,因此请使用相关的命令行参数。哪些是必要的取决于站点检查您的浏览器的彻底程度。--referer(sic) 通常就足够了,但您可能还需要--user-agentand --load-cookies

这种技术基本上是浏览器欺骗 - 您试图将wget自己作为浏览器呈现给站点。您将面临的最大问题是 CAPTCHA,它在您提供的示例站点中不存在。此外,请确保您遵守网站的计时政策(在这种情况下为 45 秒),否则您可能会被阻止。

可能无法跨不同会话下载相同的文件 - 该站点将特定文件的下载权限授予特定会话。