Schrift
[thread]4503[/thread]

WWW::Curl::Lite



<< >> 6 Einträge, 1 Seite
esskar
 2004-02-15 19:54
#39503 #39503
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
coolo...
werde es mir mal bei gelegenheit anschauen
esskar
 2004-02-16 01:05
#39504 #39504
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
ich überlege gerade, ob es sinnvoll wäre, wenn du eine ppm version bereitstellst!
esskar
 2004-02-16 02:27
#39505 #39505
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
wenn ich mal endlich Zeit finde!!!
sri
 2004-02-14 22:09
#39506 #39506
User since
2004-01-29
828 Artikel
BenutzerIn
[Homepage] [default_avatar]
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:
Code: (dl )
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:
Code: (dl )
1
2
3
4
5
  #!/usr/bin/perl -w
use strict;
use WWW::Curl::Lite;

my $content = WWW::Curl::Lite->get('http://oook.de');



Die vielseitige API:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
  #!/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:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  #!/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-->
sri
 2004-02-15 23:52
#39507 #39507
User since
2004-01-29
828 Artikel
BenutzerIn
[Homepage] [default_avatar]
[quote=esskar,15.02.2004, 18:54]coolo...
werde es mir mal bei gelegenheit anschauen[/quote]
Fein, freue mich schon auf feedback. :)
sri
 2004-02-16 02:00
#39508 #39508
User since
2004-01-29
828 Artikel
BenutzerIn
[Homepage] [default_avatar]
[quote=esskar,16.02.2004, 00:05]ich überlege gerade, ob es sinnvoll wäre, wenn du eine ppm version bereitstellst![/quote]
Wäre sicherlich nicht schlecht, allerdings, wie gesagt ich habe kein Windows!

Wenn du also ppm's bauen möchtest... ;)
<< >> 6 Einträge, 1 Seite



View all threads created 2004-02-15 19:54.