Преобразование cURL POST в Perl POST - PullRequest
0 голосов
/ 04 декабря 2018

У меня проблемы с преобразованием запроса cURL в Perl.FWIW, используя v5.10.1 в IBM AIX 7.1.

в cURL:

curl -s -u $USER:$PWD --data '@mft.json' -H 'Content-Type: application/json' -X POST $EVENT_URL

в Perl:

use LWP::UserAgent;
use Data::Dumper;

my $ua = LWP::UserAgent->new(); 


my $user = "aaa";
my $pwd = "bbb";
my $port = 7090;
my $domain = "my.site.com";
my $url = "http://".$domain.":".$port;
my $event_url = $url."/mftapp/rest/v1/events";
my $file = "mft.json";

$ua->credentials($domain.":".$port, 'default', $user, $pwd);

my $response = $ua->post($event_url, Content_Type => 'form-data', Content => [file => $file]
);

my $content = $response->as_string();

print ($content);

В зависимости от значения Content_Type,Я получаю разные результаты:

  • Content_Type = "application / json", неверный запрос 400
  • Content_Type = "form-data", неподдерживаемый тип носителя 415
  • Content_Type= "application / x-www-form-urlencoded", неподдерживаемый тип носителя 415

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

$ua->default_header('Content-Type' => 'application/json')

Не могунайдите метод объекта "default_header" через пакет "LWP :: UserAgent" в строке request.pl 20.

1 Ответ

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

Content => [file => $file] не делает то, что вы думаете, что делает.Вы просто отправляете мусор на сервер, поэтому он говорит «Плохой запрос», даже когда вы говорите, что тело - JSON (это правильный выбор).

Я бы порекомендовал добавить use Path::Tiny;и используя

$ua->post($event_url,
    Content_Type => 'application/json',
    Content => path($file)->slurp_utf8,
);

, который фактически прочитает и отправит содержимое $file.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...