Curl в HTTP-запрос Perl

#perl #http #curl #lwp-useragent

#perl #http #curl #lwp-агент пользователя

Вопрос:

Ребята, мне нужно, чтобы этот запрос curl был переведен в HTTP-запрос LWP ::UserAgent

 echo 'test{test="test"} 3' | curl -v --data-binary @- http://localhost:9090/api/metrics
  

Что я пробовал, так это :

 my $ua = LWP::UserAgent->new;
my $res = $ua->post('http://localhost:9090/api/metrics', ['test{test="test"}' => 3]);
die Dumper $res
  

Но в ответе говорится

 '_rc' => '400',
'_msg' => 'Bad Request',
'_content' => 'text format parsing error in line 1: unexpected end of input stream
  

Комментарии:

1. Вы проверили документацию LWP::UserAgent ?

2. Команда curl echo 'test{test="test"} 3' генерирует ошибку — curl: (6) Could not resolve host: echo , curl: (3) URL using bad/illegal format or missing URL .

3. @Polar Bear, очевидная ошибка копирования и вставки. Исправлено

Ответ №1:

Вы можете попробовать использовать следующий POST запрос:

 use feature qw(say);
use strict;
use warnings;
use LWP::UserAgent;

my $ua = LWP::UserAgent->new();
my $res = $ua->post('http://localhost:9090/api/metrics', Content => 'test{test="test"} 3');
if ($res->is_success) {
    say $res->decoded_content;
}
else {
    die $res->status_line;
}
  

Ответ №2:

И, поскольку вы не спрашивали, вот пример Mojo:

 use v5.10;
use Mojo::UserAgent;

my $ua = Mojo::UserAgent->new();
my $tx = $ua->post(
    'http://httpbin.org/post',
    => 'test{test="test"} 3'
    );
if ($tx->result->is_success) {
    say $tx->result->body;
}
else {
    die $tx->result->code;
}
  

Это в основном то же самое, что и LWP, за исключением того, что Mojo возвращает объект транзакции, так что вы тоже можете поиграть с запросом. Это то, что я хотел в LWP еще до того, как появился Mojo.