我正在向我的网站发出数千条POST请求。我目前正在做类似
的事情my $exec = `curl -s "http://MYSITE" -H "Accept-Language: en-US,en;q=0.8" -H "Upgrade-Insecure-Requests: 1" -H "User-Agent: $ua" --data 'a=1&b=2&c=3'
我目前正在使用threads
模块一次运行20个线程,因为此命令需要运行数千次。有没有更有效的方法来执行此操作而不是仅仅对cURL进行系统调用?
我知道我可以使用HTTP::Request
,但我不确定这是否会让它运行得更快
答案 0 :(得分:2)
Net-Curl是libcurl
实用程序使用的curl
库的瘦Perl接口。
具体来说,我认为您会对Net::Curl::Multi模块感兴趣,因为它提供了一种在不涉及线程或进程的情况下同时提交多个请求的方法。
非常快 [1] 。它(像任何其他模块一样)将使错误更容易处理。
答案 1 :(得分:1)
当然,您可以使用提出HTTP请求的众多Perl模块中的任何一个。值得注意的包括:LWP::UserAgent
,Mojo::UserAgent
和HTTP::Tiny
(核心perl)。以下示例使用HTTP :: Tiny:
use strict;
use warnings;
use JSON;
my $ua = '...';
my $response = HTTP::Tiny->new->post(
'http://example.com' => {
content => to_json(
{ a => 1, b => 2, c => 3 }
),
headers => {
'Accept-Language' => 'en-US;en;q=0.8',
'Upgrade-Insecure-Requests' => 1,
'User-Agent' => $ua,
},
},
);
unless ( $response->{is_success} ) {
...
}
使用这些模块中的任何一个都可以更容易地处理错误。