据我所知(从HTTP客户端的角度来看),我们在Perl中提供了LWP和libcurl(WWW :: Curl).我们有什么标准可供选择吗?
小智 23
从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";
}
Run Code Online (Sandbox Code Playgroud)
用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";
}
Run Code Online (Sandbox Code Playgroud)
调用is_success()更加自我记录,并在OO语言中更好地融合.if($retcode == 0)由于历史原因,C编码员习惯于看到成功的代码,但是Perl编码器没有理由应该养成这种习惯.上面还展示了LWP如何轻松地为我们处理内容解码,Curl留给您做.
它没有在上面显示,但Curl也强迫您自己处理GET/POST参数解析.在LWP中,您传递一个哈希值,它会name=value为您分解对.饼干也是.卷曲是非常低级的.
卷曲可能会更快,但问问自己在您的应用程序中有多重要.你真的要在短时间内发送100个请求吗?如果是这样,那么Curl可能是值得的.如果没有,那么为了便于实施,我认为LWP将在没有太多战斗的情况下获胜.
hob*_*bbs 10
LWP是最常用的,并且与事实上的标准模块一起工作,如HTTP :: Request,HTTP :: Headers,HTTP :: Cookies等.WWW :: Curl有时更强大,有时更快,但有类型奇怪的界面使它显然包装了一个C库.我会使用LWP,除非有某些理由不这样做.
这一切都取决于您的要求和期望。我认为 libcurl 和 LWP 的功能集略有不同,它们的性能略有不同。
请参阅此libcurl 与 LWP 性能测试或此. 我会敦促您针对自己的特征和环境进行自己的比较,以使其真正相关。
(免责声明:我是 libcurl 的主要作者)
我现在喜欢使用Mojo :: UserAgent.我甚至为2011年的Perl Advent Calendar写了这篇文章.
但是,对你的一般性问题并没有真正的答案.您使用正确的工具来完成工作.在不知道你想要做什么的情况下,几乎不可能引导你.学习两者,然后选择一个让您的工作更轻松的工具.人们可能会有更好的旋钮和表盘,以满足您的需求.