2015-10-29 2 views
0

Я делаю тысячи запросов POST на свой сайт. В настоящее время я делаю что-то вродеPerl: Пакет 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

Net-Curl - это тонкий интерфейс Perl для библиотеки libcurl, используемой утилитой curl.

В частности, я думаю, вас заинтересует модуль Net::Curl::Multi, поскольку он обеспечивает возможность одновременного подачи нескольких запросов без привлечения потоков или процессов.

Очень быстро [1]. Он (как и любой другой модуль) облегчит обработку ошибок.


  1. Это ставит LWP к стыду, даже с частичным слоем в LWP-совместимости. Очевидно, что он будет быстрее, чем обстрел, чтобы получить доступ к одной и той же библиотеке.
+0

Я попытался установить это, но я продолжаю получать сообщения об ошибках, которые curl/curl.h не могут быть найдены :(Я использовал Windows/Cygwin – Bijan

+0

Вам нужен libcurl, включая его файлы dev – ikegami

1

Конечно, вы можете использовать любой из многочисленных модулей Perl, которые делают запрос HTTP. Среди них: LWP::UserAgent, Mojo::UserAgent и HTTP::Tiny (Core 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}) { 
    ... 
} 

Использование любого из этих модулей облегчит работу с ошибками.

+0

Будет ли это иметь заметную разницу в скорости по сравнению с завитой? – Bijan

+0

Я бы предположил, что, поскольку обратные вызовы должны создавать подпроцесс до выполнения команды curl. Но единственный способ узнать наверняка - это измерить оба. –

Смежные вопросы