據我所知(從HTTP客戶端的角度來看),我們有Perl中可用的LWP和libcurl(WWW :: Curl)。我們有什麼標準可供選擇?我應該使用Perl的LWP還是lib curl?
回答
從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會在沒有太多爭鬥的情況下獲勝。
LWP是最常用的,可以和HTTP :: Request,HTTP :: Headers,HTTP :: Cookies等事實上的標準模塊一起工作.WWW :: Curl有時更強大,有時更快,但有一種奇怪的接口,使得它明顯地包裝了一個C庫。除非有某些原因,否則我會使用LWP。
這一切都取決於您的要求和期望。我認爲libcurl和LWP具有略微不同的特徵集,它們的表現略有不同。
看到這個libcurl vs LWP performance tests或this。我希望你能夠針對自己的特點和環境進行自己的比較,以使其真正相關。
(聲明:我是libcurl中的主要作者)
感謝libcurl :) – 2011-12-31 20:44:22
我喜歡現在使用Mojo::UserAgent。我甚至wrote about it for the 2011 Perl Advent Calendar。
儘管你的一般問題並沒有真正的答案。你爲你的工作使用正確的工具。不知道你想要做什麼,幾乎不可能引導你。同時學習,然後選擇一個讓你的任務更輕鬆的方法。人們可能會有更好的旋鈕和撥號盤來滿足你需要做的事情。
我更喜歡LWP,因爲它是一個核心perl模塊。爲了與Web服務交互,命令行工具curl具有一些便利功能,如 - anyauth選項,並且您還可以輕鬆地發出HTTP PUT和HTTP DELETE請求。我認爲PUT和DELETE是added as convenience methods to LWP just recently in 2011,糾正我,如果我錯了。
- 1. 我應該使用僅頭文件的類還是lib文件?
- 2. 我應該在Perl GUI中使用Perl/Tk,Tcl :: Tk還是Tkx?
- 3. 使用Perl LWP
- 4. 我應該使用Curl還是XML解析
- 5. 我應該在Perl中使用哈希還是hashrefs?
- 6. 構建Qt 5.2:我應該使用ActivePerl還是strawbery perl?
- 7. 我應該使用System.out.println()還是別的?
- 8. 我應該使用public $ var還是應該使用__construct()?
- 9. 我應該使用PurePDF還是AlivePdf
- 10. 我應該使用ABPersonViewController還是ABUnknownPersonViewController
- 11. 我應該使用Series.replace還是Series.str.replace?
- 12. 我應該使用requestanimationframe還是setTimeout?
- 13. 我應該使用SASS還是SCSS?
- 14. 我應該使用Boost.GIL還是死了?
- 15. 我應該使用Flash還是Java?
- 16. 我應該使用partial還是show.html.erb?
- 17. 我應該使用TNSNAMES.ORA還是tnsnames.ora?
- 18. 我應該使用pygame.event.get()還是pygame.event.poll()?
- 19. 我應該使用BroadcastReceiver還是Service?
- 20. 我應該使用urandom還是openssl_random_pseudo_bytes?
- 21. 我應該使用SyncLock還是Interlocked?
- 22. 我應該使用Backbone.emulateHTTP還是php file_get_contents
- 23. 我應該使用rand()還是rand_s()?
- 24. 我應該使用XMLHttpRequest/JSON還是iFrame?
- 25. 我應該使用NSOperation還是NSRunLoop?
- 26. 我應該使用UUID還是其他?
- 27. 我應該使用UIImageview還是其他?
- 28. 我應該使用TempData還是RedirectToAction?
- 29. 我應該使用SPContext還是ClientContext?
- 30. 我應該使用Timer,Handler還是ASyncTask?
是的。 libcurl是要走的路。一個關心軟件質量的人的偉大軟件;以及來自活躍的用戶/開發者郵件列表的大力支持。 – 2011-12-30 19:17:00
還有LWP :: Curl :)。 – 2011-12-30 23:18:00