HTTPClient и разбор значений заголовков - PullRequest
0 голосов
/ 13 декабря 2011

Я впервые использую 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)

Есть ли лучший способ доступа к такой переменной, как Last-Modified, чем r.header['Last-Modified'], которая возвращает ["Tue, 18 Oct 2011 00:33:15 GMT"]?

ТНХ


Уберите скобки и кавычки. Я бы предпочел просто вывести:

Tue, 18 Oct 2011 00:33:15 GMT

вместо

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

Я полагаю, что, возможно, я делаю что-то не так.

ТНХ

1 Ответ

0 голосов
/ 14 декабря 2011

«[...]» означает, что объект, который вы получаете от r.header['Last-Modified'], является массивом.HTTPClient # get возвращает HTTP :: Message объект.И HTTP :: Message # header [] возвращает массив для данного ключа (на этот раз 'Last-Modified').

Вы можете просто выбрать первую строку из массива;r.header['Last-Modified'].first

Есть еще один способ, вы можете получить Hash-объект данного заголовка ответа, вызвав r.headers. HTTP :: Message # headers выбирает первое значение вместо вас, поэтому r.headers['Last-Modified'] должно работать.

Причина, по которой заголовок HTTP :: Message # [] возвращает массив - заголовок ответа HTTPможет иметь несколько ключей в одном ответе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...