Hallo,
Ich arbeite im moment an einem einfach zu benutzendem OO interface für
WWW::Curl das
WWW::Curl::Lite heissen wird.
Das könnte für alle die zur Zeit
LWP benutzen von grossem Interesse sein, da es schon bald zu einer besseren alternative hierzu heranwachsen kann.
Ausserdem dürften
WWW::Curl bzw.
WWW::Curl::Lite die derzeit schnellste Möglichkeit sein mit Perl mehrere dateien parallel heruntezuladen(HTTP/HTTPS/FTP...)!
Curl
Hier ein zitat von
http://curl.haxx.se:
Quote"Curl is a command line tool for transferring files with URL syntax, supporting FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE and LDAP. Curl supports HTTPS certificates, HTTP POST, HTTP PUT, FTP uploading, kerberos, HTTP form based upload, proxies, cookies, user+password authentication, file transfer resume, http proxy tunneling and a busload of other useful tricks."
WWW::Curl
WWW::Curl ist ein XS wrapper um
libcurl, die recht bekannte Bibliothek von
curl, dem Kommandozeilen download tool.
WWW::Curl wurde anfang letzten Jahres von Cris Bailiff ins CPAN gestellt, leider hat er es seither nicht mehr weiter gepflegt.
Ich stehe seit ein paar Monaten in Kontakt zu Cris, da er keine Zeit mehr hat sich um die pflege des Moduls zu kümmern, habe ich mich dessen jetzt angenommen.
WWW::Curl wurde in den letzten Wochen von mir um viele Funktionen erweitert und komplett von Altlasten befreit, viele Dinge wurden auch von Grund auf neu geschrieben. Die wichtigste neue Funktion dürfte der multi support sein, was es
WWW::Curl erlaubt mehre downloads zur selben Zeit auszuführen. Das ganze ist sogar threadsafe! :)
Das wichtigste an
WWW::Curl dürfte seine Geschwindigkeit sein, bei meinen tests war es immer mindestens um den Faktor 30 schneller als
LWP/
LWP::Parallel/ein minimaler HTTP client basierend auf
IO::Socket!
Bisher bin ich noch nicht dazu gekommen es mit
HTTP::GHTTP und
HTTP::MHTTP zu vergleichen, allerdings dürften diese aufgrund des multi supports auch wenig Chancen haben. :)
Hier mal ein Beispiel das zeigt wie wenig intuitiv die
WWW::Curl API ist:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/usr/bin/perl -w
use strict;
use WWW::Curl::Easy;
my $url = 'http://oook.de';
sub header_callback {
my $chunk = shift;
print($chunk);
return length($chunk);
}
sub body_callback {
my ( $chunk, $handle ) = @_;
print($chunk);
return length($chunk);
}
my $curl = new WWW::Curl::Easy;
$curl->setopt( CURLOPT_URL, $url );
$curl->setopt( CURLOPT_HEADERFUNCTION, \&header_callback );
$curl->setopt( CURLOPT_WRITEFUNCTION, \&body_callback );
$curl->perform;
WWW::Curl::Lite
Da
WWW::Curl die C API auf unterster Ebene wiedergibt ist es sehr schwer für den normalen Perl hacker zu benutzen.
Aus diesem Grund habe ich mit
WWW::Curl::Lite begonnen, was eine LWP ähnliche API bieten soll.
WWW::Curl::Lite befindet sich zur Zeit in einem frühen beta stadium, ist aber schon sehr stabil und bietet bereits fast alle Möglichkeiten von
WWW::Curl, welche sehr sehr vielseitig sind!
Beispiele
Die einfache API:
#!/usr/bin/perl -w
use strict;
use WWW::Curl::Lite;
my $content = WWW::Curl::Lite->get('http://oook.de');
Die vielseitige API:
#!/usr/bin/perl -w
use strict;
use WWW::Curl::Lite;
use WWW::Curl::Lite::Request;
my $request = new WWW::Curl::Lite::Request;
$request->url('http://files.oook.de');
$request->useragent('curltest/0.1');
$request->postfields('test=1&curl=cool');
my $curl = new WWW::Curl::Lite;
my $response = $curl->request($request);
print $response->content;
Die API zum parallelen download:
#!/usr/bin/perl -w
use strict;
use WWW::Curl::Lite;
use WWW::Curl::Lite::Request;
my $request1 = new WWW::Curl::Lite::Request;
$request1->url('http://oook.de');
my $request2 = new WWW::Curl::Lite::Request;
$request2->url('http://files.oook.de');
my $curl = new WWW::Curl::Lite;
$curl->register($request1);
$curl->register($request2);
my $responses = $curl->request;
foreach my $response (@$responses) {
print $response->content;
}
Mithelfen
Was ich jetzt am meisten benötige ist feedback!
Patche, Dokumentation und coole Anwendungsbeispiele wären auch nicht schlecht.
Dokumentationen und Beispiele können dierekt im Wiki auf
oook.de veröffentlicht werden.
Ausserdem ist das ganze bisher nur auf Linux und *BSD getestet, ein paar tests auf anderen plattformen wie win32 wären nicht schlecht, da ich keinen win32 Rechner besitze.
Download
Zur Zeit befinden sich weder
WWW::Curl::Lite noch meine version von
WWW::Curl auf dem CPAN, dies wird sich auch nicht ändern bis eine gewisse Stabilität der API erreicht ist.
Bis dahin können aktuelle releases von
oook.de heruntergeladen werden:
WWW::Curl
WWW::Curl::Lite\n\n
<!--EDIT|sri|1076797969-->