Perl: программно установить параметр POST с помощью модуля REST :: Client - PullRequest
7 голосов
/ 03 сентября 2010

Я построил REST-сервер и теперь хочу быстро протестировать его из Perl-клиента, используя модуль REST :: Client.

Работает нормально, если я выполняю запрос GET (явно задаю параметры в URL), но не могу понять, как установить эти параметры в запросах POST.

Вот так выглядит мой код:

#!/usr/bin/perl
use strict;
use warnings;

use REST::Client;

my $client = REST::Client->new();

my $request_url =  'http://myHost:6633/my_operation';

$client->POST($request_url); 
print $client->responseContent();

Я пробовал что-то похожее на:

$client->addHeader ('my_param' , 'my value');

Но это явно неправильно, так как я не хочу устанавливать предопределенный заголовок HTTP, а параметр запроса.

Спасибо!

Ответы [ 3 ]

6 голосов
/ 13 мая 2011

Это довольно прямо.Однако вам необходимо знать, какой контент ожидает сервер.Обычно это будет XML или JSON.

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

$client->POST('http://localhost:3000/user/0/', '{ "name": "phluks" }', { "Content-type" => 'application/json'});
4 голосов
/ 14 февраля 2012

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

Так что следующий код работает для меня:

$params = $client->buildQuery([username => $args{username},
             password => $args{password}]);

$ret = $client->POST('api/rest/0.001/login', substr($params, 1), 
           {'Content-type' => 'application/x-www-form-urlencoded'});
1 голос
/ 03 сентября 2010

Я не использовал модуль REST, но, глядя на функцию POST , он принимает параметр содержимого тела, пытается создать строку параметров и отправить ее в функцию

$client->POST($request_url, "my_param=my+value"); 
print $client->responseContent();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...