Python 更有效地编写HTTP脚本

Python 更有效地编写HTTP脚本,python,ruby,perl,http,scripting,Python,Ruby,Perl,Http,Scripting,我经常希望自动执行http查询。我目前使用Java(和commons http客户端),但可能更喜欢基于脚本的方法。一些非常快速和简单的东西。在这里,我可以设置一个标题,转到一个页面,而不用担心设置整个OO生命周期,设置每个标题,调用html解析器。。。我正在寻找任何语言的解决方案,最好是脚本编写,使用PHP+Curl或者bash怎么样?Python可能就是您想要的 或者,powershell会在脚本环境中公开完整的.NET http库。Mechanize for Python似乎易于使用:请看

我经常希望自动执行http查询。我目前使用Java(和commons http客户端),但可能更喜欢基于脚本的方法。一些非常快速和简单的东西。在这里,我可以设置一个标题,转到一个页面,而不用担心设置整个OO生命周期,设置每个标题,调用html解析器。。。我正在寻找任何语言的解决方案,最好是脚本编写,使用PHP+Curl或者bash怎么样?

Python可能就是您想要的


或者,powershell会在脚本环境中公开完整的.NET http库。

Mechanize for Python似乎易于使用:

请看一看。如果您需要自定义脚本,它会为C#、Java、Perl、PHP、Python和Ruby生成代码。

Watir听起来很接近您想要的内容,尽管它(就像Selenium在另一个答案中链接到的)实际上打开了一个浏览器来做一些事情。你可以看到一些例子。另一个基于浏览器的记录+回放方法系统是

如果您的应用程序正在使用中,那么这是一个不错的选择


另一个答案中链接到的Mechanize是“库中的浏览器”,其中有克隆,和。Perl版本是最早的版本,如果您不想使用浏览器,这似乎是最好的选择。这种方法的问题是,所有前端代码(可能依赖于JavaScript)都无法执行

一些ruby库:

  • 真的很有趣,哲学很有趣
  • 经典的高质量web自动化库
  • 乍一看令人费解,但使用起来很有趣

轮到我了:wget或perl with。您可以在链接页面上找到示例。

最简单的解决方案是bash+curl,具体取决于您正在做什么

后者的手册页位于以下位置:

您可以进行POST以及GET、HTTPS、显示标题、使用Cookie、基本和摘要HTTP身份验证、通过各种代理的隧道,包括NTLM on*nix等

curl还可以作为共享库提供,并支持C和PHP


C.

我目前正在测试ReST API,发现它非常好。这是一个GUI程序,但您仍然可以将查询保存和恢复为XML文件(或让它们生成)、嵌入、编写测试脚本,等等。而且它是基于Java的(这不是一个特别的优势,但您已经提到了)

录制会话的减分。ReST客户机适用于无状态的“一次性”

如果它不适合您的需要,我会选择前面提到的Mechanize(或者,在CPAN中称为Mechanize)。

非常好,适合测试。它可以用作脚本,在交互式会话中或在Python程序中使用。

如果您有简单的需求(获取一个页面,然后对其进行解析),则很难找到它

Perl和可以使web抓取等变得简单和容易,包括易于处理表单(假设您想进入登录页面,填写用户名和密码并提交表单,像浏览器一样处理Cookie/隐藏会话标识符…)

类似地,从获取的页面查找或提取链接也很简单



如果您需要从生成的页面中解析WWW::Mechanize无法轻松帮助的内容,则将结果馈送到以简化解析。

perl似乎也存在这种情况。此外,当它打开浏览器时。。。。它是否成为活动窗口并操纵点击/事件?从未使用过它。除非涉及到浏览器(或者它加载了一个JS解释器),否则我认为不会。我很难描述基于浏览器的系统是如何工作的。Selenium主页上有一些屏幕广播。如果您查看它们,我相信您会理解的。@Zombies:httpunit支持一些javascript,请参阅生成的代码,它们使用什么http库?默认的或像mechanize?Selenium这样的浏览器为每种语言都有一个包装器库。据我所知,Selenium使用的是一个像firefox这样的完全扩展的浏览器。在我看来,这就像是用核弹杀死一只老鼠。这是一种使用浏览器(这是使用web应用最常见的方式)来测试web应用(最常用的是通过浏览器访问)的方法。我尝试了Selenium。我正在考虑使用它最初构建一个脚本,然后编辑它。下面是一个API示例:@selenium.click“link=Yahoo!”。对我来说,如果链接发生变化或者链接是动态生成的,这是有问题的。通常,人们更需要urllib2而不是urllib。你得到了一大堆答案,因为在这个空间中,实际上有很多不错的产品,专为不同的用例而设计。为什么要自动执行HTTP查询?你对这些回答做了什么?您是否需要在请求中设置任何HTTP头或查看响应中的头?是否总是可以静默地跟踪重定向,或者您需要了解它们?您需要像DOM和JavaScript这样的浏览器功能吗?等等,情况各不相同。在家里,我只是有时会看到自动化某些东西的意义(但不是像firefox宏那样的意义),我一直喜欢处理httpbots。我的第一个程序是蜘蛛。在工作中,我们确实需要一些http单元测试。至于答案,是的,这将是一个很好的阅读几天。这可以变成一个维基吗?真的没有一个答案是可以接受的。我喜欢机械化,它使它变得如此琐碎!是的,LWP和HTML::TreeBuilder通常一起使用。@Leonardo,就像巧克力和花生酱一样——它们各自都很好,但最好一起使用。
use strict;
use warnings;

use LWP::Simple;
use HTML::TreeBuilder;

my $url = 'http://www.example.com';
my $content = get( $url) or die "Couldn't get $url";

my $t = HTML::TreeBuilder->new_from_content( $content );
$t->eof;
$t->elementify;

# Get first match:
my $thing = $t->look_down( _tag => 'p', id => qr/match_this_regex/ );

print $thing ? $thing->as_text : "No match found\n";

# Get all matches:
my @things = $t->look_down( _tag => 'p', id => qr/match_this_regex/ );

print $_ ? $_->as_text : "No match found" for @things;