2013-07-27 2 views
3

Ruby에서 net/http (s) 또는 open-uri 요청에 의해 전송 될 HTTP 요청 헤더를 실제로 확보하려면 어떻게해야합니까? 요청을합니다.요청하기 전에 Ruby Net :: HTTP 요청에서 헤더 가져 오기

URI에 서명 된 문자열을 만들 때 헤더가 사용되는 경우가 있습니다. 분명히 보낼 요청 헤더를 얻을 수있는 방법이 있습니다. 여기에는 예를 들어 "Host :"헤더가 포함되어야합니다.

답변

2

Net :: HTTP 클래스는 모두 Net :: HTTPHeader를 mixin으로 사용하는 것 같습니다. 요청 객체에 to_hash()을 사용하면 모든 헤더를 한 번에 가져올 수 있고 each_header()/each()을 사용하면 한 번에 하나의 헤더를 반복 할 수 있습니다.

+0

위의 내용은 명시 적으로 설정된 헤더 목록을 얻는 데 도움이되지만, adva에 포함 시킬지 확실하지 않습니다. nce 추가 헤더 Net :: HTTP는 요청을 전송하는 순간에 추가 할 수 있습니다 ('Host'는 완벽한 예제입니다 ...이 헤더는 마지막 순간에만 자동 생성됩니다). –

+0

흠 .. 그래, 그게 내 걱정이야. each_header가 이미 발견되었습니다. URI 문자열의 "Host :"헤더를 사용하게되어서 기쁩니다.하지만 다른 헤더가 자동으로 생성되어 놓칠 수도 있습니다. – rewolf

4

잘 루비 2.0.0에서 http://ruby-doc.org/stdlib-2.0/libdoc/net/http/rdoc/Net/HTTP.html#label-Setting+Headers

작품을 볼 수 -하지만 당신은 루비 2.0.0

require 'net/http' 
uri = URI('http://github.com/ruby') 

http_request = Net::HTTP::Get.new(uri) 
http_request.each_header { |header| puts header } 

# => accept-encoding 
# => accept 
# => user-agent 
# => host  

http_response = Net::HTTP.start(uri.hostname, uri.port) do |http| 
    http.request(http_request) 
end 

루비 1.9.3

1.9.3

에 올바른, 다른 행동이다
require 'uri' 
require 'net/http' 
uri = URI.parse('http://github.com/ruby') 

http_request = Net::HTTP::Get.new(uri.path) 
http_request.each_header { |header| puts header } 

# => accept 
# => user-agent 

http_response = Net::HTTP.start(uri.hostname, uri.port) do |http| 
    http.request(http_request) 
end 

http_request.each_header { |header| puts header } 

# => accept 
# => user-agent 
# => host 

+0

1.9.3에서 작동하지 않는 것 같습니다 – rewolf

+0

재미있는 루비 2.0.0에서 작동합니다 - 답변을 업데이 트하지만 아마도 도움이되지 않습니다 – house9

+0

감사합니다 :)하지만 불행히도, 당신이 추정대로, 나는 그 호스트 헤더를 사전 요청 hahaha : ( – rewolf

관련 문제