2014-01-13 227 views
0

我必須使用Rest-Client在Ruby中實現下面列出的curl POST請求。Rest-Client:如何發佈multipart/form-data?

我必須:

  • 在頭髮送PARAMS;
  • 發送PARAMS(不包含一個文件)作爲multipart/form-data

    $ curl -X POST -i -H "Authorization: Bearer 2687787877876666686b213e92aa3ec7e1afeeb560000000001" \ 
        https://api.somewhere.com/endpoint -F sku_id=608399 
    

如何翻譯使用RESTClient實現rubygem捲曲的要求嗎?

閱讀文檔(多段):https://github.com/rest-client/rest-client 我編碼爲:

@access_token = 2687787877876666686b213e92aa3ec7e1afeeb560000000001 
url = 'https://api.somewhere.com/endpoint' 
req = { authorization: "Bearer #{@access_token}"} 


RestClient.post url, req, {:sku_id => 608399, :multipart => true} 

,但我得到了一個服務器錯誤;上面的Ruby代碼是否正確?

非常感謝, 喬治

+0

你可以嘗試使用頭文件作爲哈希:{:授權=>「承載# {@access_token}「}?另外,如果它仍然會拋出錯誤,請在這裏分享錯誤跟蹤,以便我們看到發生了什麼。 – Sam

+0

您好Xammy我有一個http狀態碼401,但是,如服務器端傢伙所證實的,這不是一個訪問令牌錯誤的問題(哈希運行smoothley和其他api端點) –

回答

1

它的代碼無效RestClient實施。 headers應該在​​之後。

module RestClient 
def self.post(url, payload, headers={}, &block) 
    ... 
end 
end 

UPDATE

@access_token應該是一個字符串"2687787877876666686b213e92aa3ec7e1afeeb560000000001"

然後

RestClient.log = 'stdout' 
RestClient.post url, {:sku_id => 608399, :multipart => true}, req 

和日誌

RestClient.post "https://api.somewhere.com/endpoint", "--330686\r\nContent-Disposition: form-data; name=\"sku_id\"\r\n\r\n608399\r\n--330686--\r\n", "Accept"=>"*/*; q=0.5, application/xml", "Accept-Encoding"=>"gzip, deflate", "Authorization"=>"Bearer 2687787877876666686b213e92aa3ec7e1afeeb560000000001", "Content-Length"=>"79", "Content-Type"=>"multipart/form-data; boundary=330686" 
+0

哦,你是對的,德米特里,所以'RestClient。 post url,{:sku_id => 608399,:multipart => true},req'可能是最好的:-)所以問題是:可以像這裏的代碼一樣提交一個有效載荷作爲multipart/form-data? –

+0

查看更新的答案。 –

+0

謝謝,已解決!正如你寫的,順便說一句,是的:訪問令牌是一個字符串,我的錯字:-(只有一個小記錄:'RestClient.log ='stdout''不適用於我,但這是另一回事..感謝您的耐心 –

8

因爲我無法理解的例子梅德顯示,這裏是創建一個多要求上傳圖片的例子:

response = RestClient.post 'https://yourhost.com/endpoint', 

{:u_id => 123, :file => File.new('User/you/D/cat.png', 'rb'), :multipart => true}, 

{:auth_token => xyz5twblah, :cookies => {'_cookie_session_name' => cookie}} 
+0

謝謝。在一個POST中發送xml和一個文件,並且你的例子爲我工作。 – dechimp

+0

不客氣的Dechimp! – Linju