2011-12-30 11 views
10

Jak rozumiem (z punktu widzenia klienta HTTP) mamy LWP i libcurl (WWW :: Curl) dostępne w Perlu. Czy mamy jakieś kryteria do wyboru?Czy powinienem używać zwinięcia LWP lub lib Perla?

+2

Tak. libcurl jest drogą do zrobienia.Świetne oprogramowanie od faceta, który dba o jakość oprogramowania; i świetne wsparcie z listy mailingowej aktywnego użytkownika/dewelopera. –

+2

Istnieje również LWP :: Curl :). –

Odpowiedz

21

tylko mówić z perspektywy API, wolę LWP. Problem z Curl polega na tym, że jest on oczywiście wykonany z biblioteki C. Na przykład:

$curl->setopt(CURLOPT_URL, 'http://example.com'); 
my $response_body; 
$curl->setopt(CURLOPT_WRITEDATA, \$response_body); 

my $retcode = $curl->perform; 
if ($retcode == 0) { 
    # Response is now in $response_body 
} 
else { 
    die "Error\n"; 
} 

Ustawianie parametrów za pomocą setopt()? Zwracanie odpowiedzi za pomocą odwołania do jednego z tych parametrów? Posiadanie metody zwraca 0 w przypadku sukcesu? Te rzeczy są idiomatyczne w kodzie C, ale nie we współczesnym Perle OO.

Oto z grubsza ten sam kod w LWP:

my $response = $lwp->get('http://example.com'); 
if($response->is_success) { 
    $response_body = $response->decoded_content; 
} 
else { 
    die "Error\n"; 
} 

Wezwanie do is_success() jest bardziej samodokumentujące i mieszanek lepiej wewnątrz języka zorientowanego obiektowo. Kodery C przyzwyczaiły się do tego, że kod taki jak if($retcode == 0) odniesie sukces z przyczyn historycznych, ale nie ma powodu, by kodery Perl wychwytywały ten nawyk. Powyższe pokazuje również, w jaki sposób LWP z łatwością zajmuje się dekodowaniem treści dla nas, które Curl pozostawia do wykonania.

Nie jest pokazane powyżej, ale Curl zmusza również do samodzielnego analizowania parametrów GET/POST. W LWP podajesz skrót i rozkłada dla ciebie pary name=value. Pliki cookie również. Curl jest w ten sposób na bardzo niskim poziomie.

Zwijanie może być szybsze, ale zadaj sobie pytanie, jak wiele to będzie miało znaczenie w twojej aplikacji. Czy naprawdę chcesz wysłać 100 żądań w krótkim czasie? Jeśli tak, to Curl może być tego wart. Jeśli nie, to przejdź do łatwości wdrożenia, co moim zdaniem LWP wygra bez większego wysiłku.

10

LWP jest najczęściej używanym i działa z de facto standardowymi modułami, takimi jak HTTP :: Request, HTTP :: Headers, HTTP :: Cookies, itp. WWW :: Curl jest czasem mocniejszy, a czasem szybszy, ale ma dziwny interfejs, który sprawia, że ​​jest oczywiste, że owija bibliotekę C. Używałbym LWP, chyba że jest jakiś powód, by tego nie robić.

4

Wszystko zależy od Twoich wymagań i oczekiwań. Myślę, że libcurl i LWP mają nieco inne zestawy funkcji i działają nieco inaczej.

Zobacz ten libcurl vs LWP performance tests lub this. Nalegałbym, abyś przeprowadził własne porównanie dla własnych funkcji i otoczenia, aby było to naprawdę istotne.

(Zastrzeżenie: Jestem głównym autorem libcurl)

+1

Dzięki za libcurl :) –

5

Teraz lubię używać Mojo::UserAgent. Nawet wrote about it for the 2011 Perl Advent Calendar.

Nie ma jednak odpowiedzi na ogólne pytanie. Używasz odpowiedniego narzędzia do swojej pracy. Nie wiedząc, co próbujesz zrobić, prowadzenie cię jest praktycznie niemożliwe. Dowiedz się obu, a następnie wybierz ten, który ułatwia zadanie. Ktoś może mieć lepsze pokrętła i pokrętła do tego, co musisz zrobić.

1

Wolałbym LWP, ponieważ jest to główny moduł perla. Aby wchodzić w interakcje z usługami internetowymi, curl narzędzia linii poleceń ma pewne funkcje wygody, takie jak - anyauth, a także można łatwo wydać żądania HTTP PUT i HTTP DELETE. Myślę, że PUT i DELETE były added as convenience methods to LWP just recently in 2011, popraw mnie jeśli się mylę.

Powiązane problemy