2010-06-04 61 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)