使用curl自动执行Web请求?


13

我有一些在工作中必须使用的“整合”系统。其中一些非常糟糕,带有框架,弹出式窗口等。

我当时正在考虑使用curl或类似方法来自动化一些东西。我需要登录,单击超链接,设置一些数据,然后他们进行一些发布。

可以使用卷发吗?还是我会更好地使用Selenium之类的东西?


1
我将为此使用Python的zope.testbrowser
phunehehe 2011年

2
您需要能够使用Javascript吗?
直觉


2
使用会话只是随每个请求发送会话ID。在cookie或GET参数中。wget并且curl可以使用Netscape cookie文件,因此,如果您的浏览器也使用此类文件,只需将其指定给下载程序就足够了。那么,您使用哪种浏览器?
manatwork 2011年

2
用那些简单的解决方案没有运气。Firefox和Chrome使用SQLite,Opera具有二进制数据文件格式。看起来您将必须搜索会话ID并将其手动传递给下载程序。
manatwork 2011年

Answers:


13

是的,完全可以卷曲。最重要的是在使用curl期间保存和重新加载Cookie --cookie-jar。您还可以根据需要发布表单数据。我通常使用称为Live HTTP Headers的Firefox插件来捕获浏览网站时发生的情况。它会记录所有标题,但也会记录任何表单帖子,这在尝试弄清楚curl时非常有用。我已经编写了bash脚本来自动执行各种curl调用,并使用管道和临时文件(由提供mktemp)在网页上进行一些有限的处理,但是如果必须进行大量的网页处理,我通常会使用LibWWW切换到Perl。


除了Firefox Live HTTP标头外,Safari和Chrome都可以在Web Inspector中显示按对象细分的标头。
bahamat 2012年

15

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

有时,当您需要登录时,首先手动在Web浏览器中登录,然后导出Web浏览器的cookie会容易得多(诸如allcookies或Firefox的Export Cookies的扩展名可以帮助您)。

如果您需要解析某些页面或表单的内容,则可能需要比curl和wget更高级的工具。有一些很好的工具,包括带有LWP(libwww)HTML::TreeBuilder(HTML-Tree)的 Perl 或带有标准库(尤其是httplibhtmllib)的Python 。

要与网站进行更复杂的交互,请参考Perl的WWW :: Mechanize。该Perl库定义了与网站进行交互的高级功能,就像Web浏览器一样,包括POST,表单,Cookie,但不包括Javascript。如果您不是Perl,那么此库中的仿制品具有其他语言的类似功能,例如Python mechanizeRuby Mechanize

最后,当您需要Javascript时,通常的方法是使用由浏览器自动化框架驱动的Web浏览器。瓦蒂尔是最受欢迎的选择;另请参阅除了SeleniumRC之外,还有没有其他好的工具可以提取包含JavaScript后绘制内容的网页?


6

我最喜欢的是wget,因此我将举一个例子。您想要做的是尽可能紧密地复制浏览器会话,因此请使用相关的命令行参数。必要的内容取决于站点对您的浏览器的检查程度。--referer(sic)通常就足够了,但您可能也需要--user-agent--load-cookies

这项技术基本上是对浏览器的欺骗-您正试图以wget浏览器的身份向网站展示自己。您将面临的最大问题是验证码,该验证码在您提供的示例网站中不存在。另外,请确保您遵守网站的时间安排政策(在这种情况下为45秒),否则您可能会被阻止。

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


全面考虑的好答案。谢谢
xiaohan2012 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.