2 votes

Un simple navigateur web en ligne de commande peut-il être écrit en une ligne de Perl ?

Il y a quelque temps, je suis tombé sur une référence qui décrivait l'écriture d'un simple script en ligne de commande Perl qui agissait comme un navigateur web. Le facteur de choc de la démo script était qu'il s'agissait d'une seule ligne de Perl. Je ne me rappelle pas quelle était la référence.

Comment quelqu'un pourrait-il faire cela ? Ou bien, connaissez-vous la référence à laquelle je fais référence ?

4voto

Saiful Points 144

Vous pouvez essayer un client web moderne de Perl :

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

Inspiré de : http://www.slideshare.net/marcusramberg/mojo-as-aclient

3voto

Quentin Points 325526

Une ligne de Perl ? Non.

Une ligne de Perl et un tas de modules contenant d'autres lignes de Perl ? Oui.

Une ligne de Perl et un tas de modules de ce type que vous pouvez télécharger à partir du site Web de la Commission européenne. CPAN ? Peut-être.

Un moteur de rendu HTML très basique pourrait ressembler à ceci :

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

1voto

Indu Devanath Points 161

Je ne sais pas s'il est raisonnable de dire que l'on peut écrire un navigateur web en une ligne de Perl, bien que l'on puisse écrire un client HTTP très simpliste en une (longue) ligne de Perl.

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/

Utilisation de IO::Socket::INET peut être un peu triché puisqu'il a plus d'une ligne dans sa source, mais il est utilisé depuis toujours et permet d'économiser environ 5 appels de fonctions pour configurer la socket.

Bien qu'en toute honnêteté, la seule ligne que j'utilise habituellement pour un simple client HTTP en Perl soit

GET http://www.google.com/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X