我应该使用Perl的LWP还是lib curl?

问题描述:

据我所知(从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

从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 teststhis。我希望你能够针对自己的特点和环境进行自己的比较,以使其真正相关。

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

+1

感谢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,纠正我,如果我错了。