2016-07-05 32 views
1

有下面的代码工作的标题:我怎么包括在红宝石的http请求

uri = URI.parse("http://www.ncdc.noaa.gov/cdo-web/api/v2/datasets/") 
response = Net::HTTP.get_response(uri) 

现在我还需要在其与此令牌散列通头:

token: "fjhKJFSDHKJHjfgsdfdsljh" 

我找不到有关如何执行此操作的任何文档。我该怎么做?

+1

有许多宝石对于Ruby来说,使用HTTP比使用Net :: HTTP容易得多。我会推荐研究那些和选择一个。 Net :: HTTP确实是在那些没有其他东西存在的时候。 –

回答

4

get_response是提出请求的简写形式,当您需要更多控制时 - 自己完成全部请求。

有Ruby的标准库here一个例子:

uri = URI.parse("http://www.ncdc.noaa.gov/cdo-web/api/v2/datasets/") 
req = Net::HTTP::Get.new(uri) 
req['token'] = 'fjhKJFSDHKJHjfgsdfdsljh' 

res = Net::HTTP.start(uri.hostname, uri.port) {|http| 
    http.request(req) 
} 
+0

谢谢,但没有发送请求两次?当你调用Net :: Http.new时,是不是发送一个请求? – JPB

+0

@JPB不,它初始化请求,连接到服务器,然后发送请求。 – Vasfed

1

虽然你当然可以用Net::HTTP为了这个目标,宝石excon允许你这样做容易得多:

require 'excon' 
url = 'http://www.ncdc.noaa.gov/cdo-web/api/v2/datasets/' 
Excon.get(url, headers: {token: 'fjhKJFSDHKJHjfgsdfdsljh'}) 
+1

这只是许多宝石中的一个而已。 [httpsparty](https://github.com/jnunemaker/httparty),[Faraday](https://github.com/lostisland/faraday)和[curb](https://github.com/taf2/curb)也很受欢迎。 – tadman