Perl:批量POST请求

时间:2015-10-29 17:48:05

标签: perl post curl request

我正在向我的网站发出数千条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,但我不确定这是否会让它运行得更快

2 个答案:

答案 0 :(得分:2)

Net-Curllibcurl实用程序使用的curl库的瘦Perl接口。

具体来说,我认为您会对Net::Curl::Multi模块感兴趣,因为它提供了一种在不涉及线程或进程的情况下同时提交多个请求的方法。

非常快 [1] 。它(像任何其他模块一样)将使错误更容易处理。

  1. 即使使用部分LWP兼容层,它也会让LWP感到羞耻。它显然比炮轰访问同一个库更快。

答案 1 :(得分:1)

当然,您可以使用提出HTTP请求的众多Perl模块中的任何一个。值得注意的包括:LWP::UserAgentMojo::UserAgentHTTP::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} ) {
   ...
}

使用这些模块中的任何一个都可以更容易地处理错误。