2014-11-05 35 views
2

我使用Perl 5.16和REST :: Client。使用perl時從休息服務獲得狀態405 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(不允許的方法)。

然而,當我簡單地使用捲曲用相同的細節,響應成功:

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"; 
} 

注意的捲曲請求,絕對是一個POST(--data參數會導致一個POST請求),我知道確信該服務正在等待POST。

它必須是perl模塊REST :: Client中的一個問題。 也許我使用它錯了?

回答

1

您有權訪問服務器日誌嗎?

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

你有API文檔嗎?它說使用POST嗎?

如果是這樣,那麼這是一個服務器配置問題。如果API文檔不說使用POST,那麼它就是你。

+0

curl請求肯定是POST(--data參數導致POST請求) – asafd 2014-11-06 07:17:36

+0

...和服務器日誌? – 2014-11-10 16:34:55

0

我知道這是一個較舊的帖子「再次是相對的」!

我偶然發現了同樣的問題,我的解決方案是將請求方法從POST更改爲PUT,並且它做到了。