2013-02-06 15 views
13

RubyでNet :: HTTPを使用してHTTPリクエストを作成していますが、すべてのレスポンスヘッダを取得する方法がわかりません。Ruby HTTPリクエストからレスポンスヘッダを取得

私はresponse.headerresponse.headersを試しましたが、何も動作していません。

+0

Net/HTTPは悪名高い悪質なAPIを持っています。 httpclientのような別のものを使用していた場合、 'response.header'はちょうど働いていたでしょう。 –

+0

何が悪いのですか?なぜ私はそれを避けたいのですか? – BlackHatSamurai

+0

ライブラリそのものは悪くありませんが、あなたが発見したように、APIはまばらで直感的ではありません。私はいつでも、httpclientや、HTTParty、Rest-Clientなどのより多くの機能を備えたラッパーライブラリーを使用します。 –

答えて

36

応答オブジェクトには実際にヘッダーが含まれています。

詳しくは、Net::HTTPResponseを参照してください。

あなたが行うことができます:あなたはまた、ヘッダーを繰り返し処理したレスポンス・オブジェクトにeach_headerまたはeachを呼び出すことができます

response['Cache-Control'] 

あなたが本当にレスポンスオブジェクトの外側ヘッダをしたい場合は、RestClientライブラリはresponse.headersのための正常な動作を持っていることをresponse.to_hash

2

注意を呼び出します。

response.headers 
{ 
          :server => "nginx/1.4.7", 
          :date => "Sat, 08 Nov 2014 19:44:58 GMT", 
        :content_type => "application/json", 
        :content_length => "303", 
         :connection => "keep-alive", 
      :content_disposition => "inline", 
    :access_control_allow_origin => "*", 
      :access_control_max_age => "600", 
    :access_control_allow_methods => "GET, POST, PUT, DELETE, OPTIONS", 
    :access_control_allow_headers => "Content-Type, x-requested-with" 
} 
0

応答Net::HTTPResponseは@Intrepiddで言ったように、あなたが以下のように列挙子を返しますどのeach_header方法から得ることができますNet::HTTPHeaderからヘッダーが含まれています

response.each_header 

#<Enumerator: #<Net::HTTPOK 200 OK readbody=true>:each_header> 
[ 
    ["x-frame-options", "SAMEORIGIN"], 
    ["x-xss-protection", "1; mode=block"], 
    ["x-content-type-options", "nosniff"], 
    ["content-type", "application/json; charset=utf-8"], 
    ["etag", "W/\"51a4b917285f7e77dcc1a68693fcee95\""], 
    ["cache-control", "max-age=0, private, must-revalidate"], 
    ["x-request-id", "59943e47-5828-457d-a6da-dbac37a20729"], 
    ["x-runtime", "0.162359"], 
    ["connection", "close"], 
    ["transfer-encoding", "chunked"] 
] 

あなたはto_hメソッドを使用して、実際のハッシュを取得することができます次のようになります。

response.each_header.to_h 

{ 
    "x-frame-options"=>"SAMEORIGIN", 
    "x-xss-protection"=>"1; mode=block", 
    "x-content-type-options"=>"nosniff", 
    "content-type"=>"application/json; charset=utf-8", 
    "etag"=>"W/\"51a4b917285f7e77dcc1a68693fcee95\"", 
    "cache-control"=>"max-age=0, private, must-revalidate", 
    "x-request-id"=>"59943e47-5828-457d-a6da-dbac37a20729", 
    "x-runtime"=>"0.162359", 
    "connection"=>"close", 
    "transfer-encoding"=>"chunked" 
} 
関連する問題