使用perl REST :: Client从休息服务获取状态405

时间:2014-11-05 09:55:13

标签: perl rest

我正在使用Perl 5.16和REST :: Client。

我的代码如下:

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

$client->setHost($server_address);

my $url = "www.myservice.com/rest/do";

my $json = JSON->new;
my $json_request = $json->encode($request);

$client->addHeader("x-request-header", $base64Header);
$client->addHeader("Content-Type", "application/json");

$client->POST($url, $json_request);

此代码始终生成HTTP状态405(不允许使用方法)。

但是,当我只使用具有相同细节的curl时,响应成功:

sendCURL($client->getHost().$url, $json_request, $base64Header);

sub sendCURL {
  my $url = $_[0];
  my $data = $_[1];
  my $header = $_[2];

  my $curl = "curl --data \'".$data."\' --header \"Content-Type: application/json\" --header \"x-request-header: ".$header."\" ".$url;
  print $curl."\n";
  my $response = system $curl;
  print $response."\n";
}

请注意,curl请求肯定是POST(--data参数导致POST请求),我确信该服务正在等待POST。

它必须是perl模块REST :: Client中的一个问题。 也许我使用它错了?

2 个答案:

答案 0 :(得分:1)

您是否可以访问服务器日志?

curl请求可能是GET,而不是POST。

您有API文档吗?它说使用POST吗?

如果是,那么它就是服务器配置问题。如果API文档没有说使用POST那么它就是你。

答案 1 :(得分:0)

我知道这是一篇较老的帖子“再次是相对的”!

我偶然发现了同样的问题,我的解决方案是将请求方法从POST改为PUT并且它做到了。