2016-07-05 12 views
1

den Code unten gearbeitet haben:wie füge ich einen Header in einer HTTP-Anforderung in Ruby

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

Jetzt drin Ich muss auch einen Header mit diesem Token Hash-Pass:

token: "fjhKJFSDHKJHjfgsdfdsljh" 

Ich kann keine Dokumentation darüber finden, wie das geht. Wie mache ich es?

+1

Es gibt viele Edelsteine für Ruby, das es viel einfacher macht, HTTP als Net :: HTTP zu verwenden. Ich würde empfehlen, diese zu recherchieren und eine auszuwählen. Net :: HTTP ist wirklich für die Zeiten, wenn nichts anderes bereits existiert. –

Antwort

4

get_response ist eine Abkürzung für eine Anfrage, wenn Sie mehr Kontrolle benötigen - machen Sie eine vollständige Anfrage.

Es ist ein Beispiel in Ruby-Standardbibliothek 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

Danke, aber sendet das nicht die Anfrage zweimal? Wenn Sie Net :: Http.new aufrufen, sendet das nicht eine Anfrage? – JPB

+0

@JPB Nein, initialisiert die Anfrage, verbindet sich mit dem Server und sendet dann die Anfrage. – Vasfed

1

Obwohl Sie sicherlich Net::HTTP für dieses Ziel verwenden könnte, gem excon ermöglicht es Ihnen, es zu tun viel einfacher:

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

Das ist nur einer von vielen Edelsteinen, die das tun. [httparty] (https://github.com/jnunemaker/httparty), [Faraday] (https://github.com/lotistisland/faraday) und [curb] (https://github.com/taf2/curb) sind auch sehr beliebt. – tadman