2012-03-14 2 views
10

У меня есть список URL-адресов, мне нужно проверить, какие из следующих URL-адресов действительны.Как получить только код ответа из HTTP-запроса в Ruby

Код я использовал

require 'net/http' 

url = 'http://mysite.com' 
res = Net::HTTP.get_response(URI.parse(url.to_s)) 
puts res.code 

Здесь я могу проверить код ответа 200 для действительного URL. Меня беспокоит возвращаемый объект res, содержащий код, тело и т. Д. Таким образом, мой ответ (res object) становится тяжелым. Есть ли способ, чтобы я мог получить только код ответа. Мне не нужна никакая другая информация. Пожалуйста, помогите

ответ

8

Я не проверял, возможно ли это с Net :: HTTP, но вы можете использовать Curb, который является оболочкой Ruby для curl. Посмотрите на Curl::Easy#http_head

С Net :: HTTP вы также можете использовать HTTP#head, который запрашивает заголовки с сервера с использованием метода HEAD.

Информация о методе РУКОВОДИТЕЛЯ в HTTP:

9,4 ГОЛОВА метод

НАЧАЛЬНИК идентичен GET, за исключением, что сервер не должен возвращать тело сообщения в ответ. Метаинформация, содержащаяся в заголовках HTTP в ответ на запрос HEAD, ДОЛЖНА быть идентичной информации, отправленной в ответ на запрос GET. Этот метод может быть использован для получения метаинформации о сущности, подразумеваемой запросом, без передачи самого объекта-объекта. Этот метод часто используется для проверки гипертекстовых ссылок на достоверность, доступность и недавнюю модификацию.

Чтобы получить код ответа страницы:

запрос
require 'net/http' 
response = nil 
Net::HTTP.start('www.example.com', 80) {|http| 
    response = http.head('/page.html') 
} 
puts response.code 
2

головки может выглядеть следующим образом:

require 'socket' 

s = TCPSocket.open("google.com", 80) 
s.puts "HEAD/HTTP/1.1" 
s.puts "Host: google.com" 
s.puts 

headline = s.gets 
s.close 

status = headline.scan(/\d\d\d/).first.to_i 
5

Код я использовал:

response = nil 
Net::HTTP.start('upload.wikimedia.org', 80) {|http| 
response = http.head(url) 
} 
puts response.code 
6

Это проще всего в Faraday:

# one line to make request 
response = Faraday.head url 

# example with headers 
resource_size = response.headers['Content-Length'] 
Смежные вопросы