Я хочу разогреть свою службу, как только будет завершено развертывание, в противном случае первый человек, обращающийся к моей службе, столкнется с большой задержкой.
Для этого я хочу выполнить команду 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 будет выполняться во время процесса развертывания и вызовет основной контроллер Spring моей службы.
Я хочу записать эту команду в файл perl.
Но я не очень понимаю, как это сделать!
Любые зацепки были бы полезны :)
Используя corion.net/curl2lwp.psgi, вы можете легко преобразовать командную строку Curl в сценарий Perl, используя LWP :: UserAgent. Поле для комментариев слишком мало для результирующего кода, но если это то, что вы ищете, я могу опубликовать его в качестве ответа.
@Corion было бы замечательно, если бы вы вставили его в качестве ответа заранее! :)
curl - это просто оболочка для библиотеки libcurl. Почему бы не использовать библиотеку libcurl напрямую, вместо того, чтобы раскошелиться? Net :: Curl.
Плохая практика, но с использованием 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`
если вы хотите использовать конкретный 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 и подобные.
В качестве грубого прототипа воспроизведения того, что делает 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 более удобно, поскольку вы получаете код состояния непосредственно обратно.
пока я пытаюсь запустить указанный выше сценарий, я получаю сообщение об ошибке «java.lang.IllegalArgumentException: в имени метода обнаружен недопустимый символ. Имена методов HTTP должны быть токенами». я предполагаю, что это связано с наличием "|" (трубка) персонаж. как я могу от этого избавиться?
Это сообщение об ошибке Java. Откуда вы получаете это сообщение об ошибке Java? Вышеупомянутый сценарий является сценарием Perl.
Спасибо за помощь! дайте мне знать, как я могу быть уверен, что этот скрипт был выполнен успешно или нет?
@GauravSetia Это скорее вопрос отладки - я не знаю, как отлаживать сценарии Java, но вы можете print $res->is_success или exit $res->is_success или print $res->code, чтобы увидеть / сигнализировать о статусе запроса.
Наверное, лучше сделать это на чистом perl ... LWP :: UserAgent или подобном модуле. Черт возьми, может даже быть привязка libcurl ...