2010-06-04 40 views
2

我正嘗試與Rails中的RESTful服務進行通信。它可以返回不同格式的數據,json和xml。有沒有一種特定的方式可以獲得我想要的數據類型。在Rails中更改HTTP標頭

該服務提到需要在HTTP標頭中設置ACCEPT。我不知道如何在Ruby中做到這一點。

目前我正在做這讓

response = Net::HTTP.get(URI.parse(<url>)) 

我對如何改變該呼叫的標頭信息不知道。任何幫助表示讚賞。謝謝。

+0

另外URL由路徑和查詢組成。 '/' – 2010-06-04 05:45:18

回答

3

我已完成了以這種方式工作

uri = URI(<domain>:<port>/<path>) 
params = { <query_hash> } 
headers = { <header_hash> } 

http = Net::HTTP.new(uri.host, uri.port) 
request = Net::HTTP::Get.new(uri.path) 
request.set_form_data(params) 
request = Net::HTTP::Get.new(uri.path+ '?' + request.body , headers) 
response = http.request(request) 

其中query_hash是哈希前所有查詢:{ "q" => "cats" } 同樣適用於header_hash ex:{ "ACCEPT" => "text/json" }

+0

+1真的很好,應該更有投票權。很難找到一個簡單的實例。 – Eduardo 2014-01-01 13:15:04

0

首先,你必須創建HTTP會話對象:

http_session = Net::HTTP.new(URI.parse('...').to_s, 80) 

然後你就可以定義HTTP標頭,哈希,並通過它來獲取方法,第二個參數:

http_session.get('/resources', {'Accept' => 'application/xml+xhtml'}) 
+0

說我的網址是 'http://desktop.domain.com:28880/random/path?something = other' 當我嘗試第一步時會引發錯誤..是否有我失蹤? – 2010-06-04 06:04:22

+0

第一步,您只需傳遞域名。沒有路徑,沒有查詢。所以你必須將其分解爲'http://domain.tld'的形式 – Eimantas 2010-06-04 06:49:24

0

參數和標題可以這樣設置。

uri = URI.parse(<url>) 
uri.query = URI.encode_www_form('param1' => 'value1') 
req = Net::HTTP::Get.new(uri.to_s, {'header1' => 'value1'}) 

res = Net::HTTP.new(uri.host, uri.port).request(req)