2011-12-13 2 views
0

나는 처음 HttpClient를을 사용하여 다음과 같이 요청을 해요 :HttpClient를 밖으로 구문 분석 헤더 값

r=c.get('http://slashdot.org') 
tmp={} 
tmp[:location_id]=x.id 
tmp[:body]=r.body 
tmp[:last_modified]=r.header['Last-Modified'] 
tmp[:content_length]=r.header['Content-Length'] 
puts "last modified: " + r.header['Last-Modified'].to_s 
# last modified: ["Fri, 12 Aug 2011 19:26:24 GMT"] 
puts "content-length: " + r.header['Content-Length'].to_s 
# content-length: ["2138"] 
puts tmp['location_id'] 
Crawl.create(tmp) 

["Tue, 18 Oct 2011 00:33:15 GMT"]을 반환 r.header['Last-Modified']보다 최근 수정 같은 변수를 액세스하기위한 더 좋은 방법이 있나요?

들으


은 괄호와 따옴표를 꺼냅니다. 오히려 단지 출력 나는 것 :

Tue, 18 Oct 2011 00:33:15 GMT 

오히려

["Tue, 18 Oct 2011 00:33:15 GMT"] 

보다 내가 아마 뭔가 잘못하고 있어요 파악하고있다.

들으

+0

무엇이보고 싶습니까? –

+0

우리에게 수업 (또는 최소한 단순화 된 버전)을 보여 주면 도움이 될 것입니다. –

답변

0

은 "[...]는"당신이 r.header['Last-Modified']에서 얻을 객체가 배열을 의미합니다. HTTPClient # get은 HTTP::Message 개체를 반환합니다. HTTP::Message#header[]은 주어진 키에 대한 Array를 반환합니다 (이번 'Last-Modified').

배열에서 첫 번째 String을 선택할 수 있습니다. r.header['Last-Modified'].first

또 다른 방법이 있습니다. r.headers을 호출하여 주어진 응답 헤더의 Hash 개체를 가져올 수 있습니다. HTTP::Message#headers 대신에 첫 번째 값을 지정하면 r.headers['Last-Modified']이 작동합니다.

HTTP :: Message # header []가 Array를 반환하는 이유는 HTTP 응답 헤더가 단일 응답에서 여러 개의 키를 가질 수 있기 때문입니다.