一个简单的命令行Web浏览器可以写在一行Perl中吗?

时间:2011-01-26 17:30:30

标签: perl

很久以前,我遇到了一个描述编写一个简单命令行Perl脚本的引用,该脚本充当了Web浏览器。演示脚本的冲击因素是它只是一行Perl。我不记得引用的内容。

有人会这样做吗?或者,你知道我所指的参考吗?

3 个答案:

答案 0 :(得分:4)

您可以尝试使用Perl的现代Web客户端:

perl -MMojo::Client -e "print Mojo::Client->new->get('http://www.example.com')->res->body;"

灵感来自: http://www.slideshare.net/marcusramberg/mojo-as-aclient

答案 1 :(得分:3)

Perl的一行? 没有

一行Perl和一堆包含更多Perl行的模块?

你可以从CPAN下载一行Perl和一堆这样的模块吗?也许。

非常基本的HTML渲染器可能如下所示:

 perl -Mv5.10 -MLWP::Simple -MHTML::TreeBuilder::XPath -e"say HTML::TreeBuilder::XPath->new->parse(LWP::Simple::get('http://example.com'))->eof->as_text();"

答案 2 :(得分:1)

我不知道你可以在一行Perl中编写一个Web浏览器是合理的,尽管你可以在一个(长)Perl行中编写一个非常简单的HTTP客户端。

perl -MIO::Socket::INET -e 'die unless ($host, $path) = shift =~ m{http://(\w+(?:.\w+)*)(/.*)}; my $sock = IO::Socket::INET->new(PeerAddr=>$host,Proto=>"tcp",PeerPort=>80) or die; print $sock "GET $path HTTP/1.0\nHost: $host\n\n"; while (<$sock>) { print }' http://www.google.com/

使用IO::Socket::INET可能有点作弊,因为它的源代码中有多行,但它永远是核心,并节省了大约5个cookie切割器函数调用来设置套接字。

虽然说实话,我通常用于简单的Perl HTTP客户端的一行是

GET http://www.google.com/