2012-01-03 16 views
1

Ruby rest-client gemを使用してRESTリソースに投稿する必要があります。phpとrubyの同等のRESTコード

HTTPリクエストの例は次のとおりです。

POST /somefolder HTTP/1.1 
Authorization: Basic YWFhOmFw 
Host: example.com 
folder: creat 

、それはPHPで書かれたデモ・コードを提供し、うまく機能:

<?php 
$process = curl_init('example.com/somefolder'); 
curl_setopt($process, CURLOPT_POST, 1); 
curl_setopt($process, CURLOPT_POSTFIELDS, ''); 
curl_setopt($process, CURLOPT_HTTPHEADER, array('folder: true')); 
curl_setopt($process, CURLOPT_USERPWD, "username:password"); 
curl_setopt($process, CURLOPT_HEADER, 0); 
curl_setopt($process, CURLOPT_TIMEOUT, 30); 
curl_setopt($process, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($process, CURLOPT_FOLLOWLOCATION, 1); 
print(curl_exec($process)."<br/>"); 
print(curl_getinfo($process, CURLINFO_HEADER_OUT).'<br/>'); 
curl_close($process); 
?> 

私のRubyコードは次のとおりです。

resource = RestClient::Resource.new('http://example.com/', :user => 'username', :password => 'password') 
resource.post 'somefolder', :folder => 'true' 

しかし、それは禁止された403を返します。私はルビーのどこが間違っているのか知りたい。ありがとう。

ところで、私はどのようにルビーコードによって送信されたHTTPトラフィックをキャプチャできますか?私はMACを使用しています。

答えて

1

私はRubyに最も馴染みがありませんが、コードには2つの問題があると思います。パスの代わりにsomefolderがコンテンツとして送信され、フォルダfolderが変更されています。私は、ルビーの要求がこのように見えると思います。

POST/HTTP/1.1 
Authorization: Basic YWFhOmFw 
Host: example.com 
X-Folder: true 

somefolder 

documentationの私の読書は、次への切り替えは、パスを修正することを示唆しているが、私はあなたがヘッダー名のクライアント側を修正することができるかどうかはわかりません。

resource = RestClient::Resource.new('http://example.com/', :user => 'username', :password => 'password') 
resource['somefolder'].post, :folder => 'true' 

コンテンツに空の文字列またはnull値を含める必要がある場合があります。

Charles Proxyを使用してHTTPリクエストを表示します。

+0

ありがとう、アブラハム、それは動作します。実際には、正しいコードは 'resource ['somefolder']。post ''、:folder => 'true'' – Frankel