2011-12-30 64 views
10

據我所知(從HTTP客戶端的角度來看),我們有Perl中可用的LWP和libcurl(WWW :: Curl)。我們有什麼標準可供選擇?我應該使用Perl的LWP還是lib curl?

+2

是的。 libcurl是要走的路。一個關心軟件質量的人的偉大軟件;以及來自活躍的用戶/開發者郵件列表的大力支持。 – 2011-12-30 19:17:00

+2

還有LWP :: Curl :)。 – 2011-12-30 23:18:00

回答

21

從API角度看剛纔講的,我更喜歡LWP。 Curl的問題在於它非常明顯是由C庫創建的。例如:

$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"; 
} 

將參數設置爲setopt()?使用對這些參數之一的引用返回響應?有一個方法成功返回0?這些東西在C代碼中是慣用的,但不是在現代的OO Perl中。

這裏是大致相同的代碼在LWP:

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

is_success()的調用是更多的自我記錄和融合的面向對象的語言裏面更好。由於歷史原因,C代碼人習慣於成功地看到類似if($retcode == 0)這樣的代碼,但是Perl編碼人員沒有理由選擇這種習慣。以上內容還顯示了LWP如何輕鬆處理我們的內容解碼,Curl將爲您做的事情。

上面沒有顯示,但Curl也強制你自己處理GET/POST參數解析。在LWP中,你傳遞一個散列值,併爲你分解name=value對。餅乾也是。這種捲曲很低級。

捲曲可能會更快,但問問自己在您的應用程序中有多重要。你真的會在短時間內發送100個請求嗎?如果是這樣,那麼Curl可能是值得的。如果不是的話,那就去實施一下吧,我認爲LWP會在沒有太多爭鬥的情況下獲勝。

10

LWP是最常用的,可以和HTTP :: Request,HTTP :: Headers,HTTP :: Cookies等事實上的標準模塊一起工作.WWW :: Curl有時更強大,有時更快,但有一種奇怪的接口,使得它明顯地包裝了一個C庫。除非有某些原因,否則我會使用LWP。

4

這一切都取決於您的要求和期望。我認爲libcurl和LWP具有略微不同的特徵集,它們的表現略有不同。

看到這個libcurl vs LWP performance teststhis。我希望你能夠針對自己的特點和環境進行自己的比較,以使其真正相關。

(聲明:我是libcurl中的主要作者)

+1

感謝libcurl :) – 2011-12-31 20:44:22

5

我喜歡現在使用Mojo::UserAgent。我甚至wrote about it for the 2011 Perl Advent Calendar

儘管你的一般問題並沒有真正的答案。你爲你的工作使用正確的工具。不知道你想要做什麼,幾乎不可能引導你。同時學習,然後選擇一個讓你的任務更輕鬆的方法。人們可能會有更好的旋鈕和撥號盤來滿足你需要做的事情。

1

我更喜歡LWP,因爲它是一個核心perl模塊。爲了與Web服務交互,命令行工具curl具有一些便利功能,如 - anyauth選項,並且您還可以輕鬆地發出HTTP PUT和HTTP DELETE請求。我認爲PUT和DELETE是added as convenience methods to LWP just recently in 2011,糾正我,如果我錯了。

相關問題