Perl:使用REST :: Client模块以编程方式设置POST参数

时间:2010-09-03 11:30:46

标签: perl http rest post

我已经构建了一个REST服务器,现在我想使用REST :: Client模块从Perl客户端快速测试它。

如果我执行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 个答案:

答案 0 :(得分:6)

非常直截了当。但是,您需要知道服务器期望的内容类型。这通常是XML或JSON。

F.ex。这适用于可以理解第二个参数中JSON的服务器,如果你告诉它在第三个参数的标题中是什么。

$client->POST('http://localhost:3000/user/0/', '{ "name": "phluks" }', { "Content-type" => 'application/json'});

答案 1 :(得分:4)

REST模块接受body内容参数,但我发现它使用一串参数,你需要设置一个合适的内容类型。

所以以下代码对我有用:

$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'});

答案 2 :(得分:1)

我没有使用REST模块,但查看POST function,它接受​​一个body内容参数,尝试创建一个参数字符串并在函数中发送

$client->POST($request_url, "my_param=my+value"); 
print $client->responseContent();