2013-02-06 28 views
13

Tworzę żądanie HTTP z Ruby używając Net :: HTTP, i nie wiem, jak uzyskać wszystkie nagłówki odpowiedzi.Uzyskaj nagłówki odpowiedzi z żądania HTTP Ruby

Próbowałem response.header i response.headers i nic nie działa.

+0

Net/HTTP ma bardzo zły interfejs API. Jeśli używasz innego, takiego jak httpclient, po prostu zadziałałby 'response.header'. –

+0

Co masz na myśli przez złe? Dlaczego chcę tego uniknąć? – BlackHatSamurai

+0

Sama biblioteka nie jest zła, ale interfejs API jest niezrozumiały i nieintuicyjny. Zawsze używam httpclient lub biblioteki otoki z większą liczbą funkcji, takich jak HTTParty, Rest-Client itd. Kiedy mogę. –

Odpowiedz

36

Obiekt odpowiedzi faktycznie zawiera nagłówki.

Zobacz "Net::HTTPResponse", aby uzyskać więcej informacji.

można zrobić:

response['Cache-Control'] 

Można również zadzwonić each_header lub each na obiekcie odpowiedzi na iterację nagłówków.

Jeśli naprawdę chcesz nagłówki poza obiekcie odpowiedzi, zadzwoń response.to_hash

2

Zauważ, że biblioteka RestClient ma oczekiwanego zachowania dla response.headers.

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

Odpowiedź Net::HTTPResponse zawiera nagłówki z Net::HTTPHeader które można uzyskać z each_header sposobu jak wspomniany przez @Intrepidd który zwróci wyliczający jak poniżej:

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"] 
] 

można uzyskać rzeczywistą wartość mieszania za pomocą metody to_h poniżej:

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" 
} 
Powiązane problemy