Как выполнить команду CURL из сценария perl? - PullRequest
0 голосов
/ 12 декабря 2018

Я хочу прогреть свой сервис, как только будет выполнено развертывание, в противном случае первый пользователь, столкнувшийся с моим сервисом, столкнется с большой задержкой.

Для этого я хочу выполнить команду curl, подобную:

curl -v -H "Accept:text/x-html-parts,text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8" -H "Accept-Charset:UTF-8" -H "Accept-Encoding:identity" -H "Connection:Keep-Alive" -H "Via:HTTP/1.1 ShoppingArea" + + + something.. something....

Этот скрипт curl будет выполняться во время процесса развертывания и вызовет основной контроллер пружины моего сервиса.

Я хочу написать эту команду в файле perl.

Ноя не очень уверен, как это сделать!

Любые выводы будут полезны:)

Ответы [ 3 ]

0 голосов
/ 12 декабря 2018

, если вы хотите использовать определенный CURL только в вашем Perl Script.Я бы порекомендовал вам выполнить системный вызов с использованием обратных галочек.

my $curlcomm = `curl -v -H "Accept:text/x-html-parts,text/html,application/xhtml+xml,applicatio/xml;q=0.9,image/webp,image/apng,*/*;q=0.8" -H "Accept-Charset:UTF-8" -H "Accept-Encoding:identity" -H "Connection:Keep-Alive" -H "Via:HTTP/1.1 ShoppingArea" + + + something.. something....`

, но также доступны стандартные способы, которые могут использовать LWP :: UserAgent , LWP :: Curl и тому подобное.

0 голосов
/ 12 декабря 2018

В качестве грубого прототипа воспроизведения того, что curl делает в чистом Perl (используя https://corion.net/curl2lwp.psgi), вы можете легко преобразовать командную строку Curl в скрипт Perl, используя LWP :: UserAgent:

#!perl
use strict;
use warnings;
use LWP::UserAgent;
use HTTP::Request;


my $ua = LWP::UserAgent->new();
my $r  = HTTP::Request->new(
    'GET' => 'https://api.example.com/',
    [
        'Connection' => 'Keep-Alive',
        'Via'        => 'HTTP/1.1 ShoppingArea',
        'Accept' =>
'text/x-html-parts,text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
        'Accept-Charset'  => 'UTF-8',
        'Accept-Encoding' => 'identity',
        'Host'            => 'api.example.com:443',
        'User-Agent'      => 'curl/7.55.1',
    ],

);
my $res = $ua->request( $r, );


__END__

Created from curl command line
curl -v -H "Accept:text/x-html-parts,text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8" -H "Accept-Charset:UTF-8" -H "Accept-Encoding:identity" -H "Connection:Keep-Alive" -H "Via:HTTP/1.1 ShoppingArea" https://api.example.com/ 

Для этого требуется модуль LWP :: UserAgent , поэтому переход к curl может быть более быстрым подходом к вам.Если вам нужно реагировать на результат, например отправлять сообщения об ошибках по HTTP Error 500 или другие уведомления по HTTP Error 4xx, использование чистого Perl более удобно, так как вы возвращаете код состояния напрямую.

0 голосов
/ 12 декабря 2018

Плохая практика, но использование system (запускает произвольный код оболочки):

system "curl -v -H 'Accept:text/x-html-parts,text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8' -H 'Accept-Charset:UTF-8' -H 'Accept-Encoding:identity' -H 'Connection:Keep-Alive' -H 'Via:HTTP/1.1 ShoppingArea' + + + something.. something...."

также из ( Как мне написать Perl-скрипт для использования curl для обработки URL? ):

my $curl=`curl http://whatever`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...