2016-07-05 63 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