2016-05-27 17 views
0

Ich versuche, eine HTTP-Kopf-Anfrage mit Net :: HTTP zu machen.Net :: HTTP fehlgeschlagen auf eine Kopfanfrage

require 'net/http' 

uri = URI("https://github.com/rails/rails") 
http = Net::HTTP.new(uri.host, uri.port) 
request = http.head(uri) 

puts request 

schlägt fehl.

AFAICT, das liegt daran, dass Net :: HTTP auf einen Antworttext wartet, der nie kommen wird. Wie kann ich Net :: HTTP bitten, eine Anfrage zu stellen und nicht auf den Antworttext zu warten?

+1

Der richtige Weg, um eine HEAD-Anfrage mit Curl zu machen, ist die '--head' Option. Mit "-X HEAD" sendet curl die HEAD-Methode, wartet aber immer noch auf einen Antworttext - daher die Verzögerungen. –

+0

@ Vasily - Ah, das macht Sinn. Das Problem ist wahrscheinlich, dass intern Net :: HTTP auf einen Antworttextkörper wartet und keinen bekommt, richtig? –

Antwort

1

Wenn Sie die documentation richtig folgen, funktioniert es gut. Die Bibliotheksimplementierung hat wahrscheinlich einige Annahmen über die Verwendung, wenn festgestellt wird, ob die Nutzdaten gelesen werden sollen.

response = nil 
Net::HTTP.start('github.com', :use_ssl => true) do |http| 
    response = http.head('/rails/rails') 
end 

response.each { |k, v| [k, v] }