2012-03-14 34 views
10

Mam listę adresów URL, muszę sprawdzić, który z poniższych adresów URL jest prawidłowy.Jak uzyskać tylko kod odpowiedzi z żądania HTTP w Ruby

Kod użyłem jest

require 'net/http' 

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

Tutaj mogę sprawdzić kod odpowiedzi 200 do prawidłowego adresu URL. Obawiam się, że zwracany obiekt "res" zawiera kod, treść itp. Tak więc moja odpowiedź (obiekt res) staje się ciężka. Czy jest jakiś sposób, aby uzyskać tylko kod odpowiedzi. Nie potrzebuję żadnych innych informacji. Proszę pomóc

Odpowiedz

8

Nie sprawdziłem, czy jest to możliwe z Net :: HTTP, ale można użyć Curb, który jest opakowaniem Ruby dla curl. Spójrz na: Curl::Easy#http_head

W Net :: HTTP możesz również użyć HTTP#head, który żąda nagłówków z serwera przy użyciu metody HEAD.

informacje HTTP metody HEAD:

9,4 HEAD metoda

HEAD jest identyczna z GET wyjątkiem tego, że serwer nie musi zwracać wiadomość-ciało w odpowiedzi. Metainformacja zawarta w nagłówkach HTTP w odpowiedzi na żądanie HEAD powinna być identyczna z informacją wysłaną w odpowiedzi na żądanie GET. Ta metoda może być użyta do uzyskania metainformacji o jednostce implikowanej przez żądanie bez przenoszenia samej jednostki-ciała. Ta metoda jest często używana do testowania łączy hipertekstowych pod względem ważności, dostępności i najnowszych modyfikacji.

Aby uzyskać kod reakcji strony:

prośba
require 'net/http' 
response = nil 
Net::HTTP.start('www.example.com', 80) {|http| 
    response = http.head('/page.html') 
} 
puts response.code 
2

głowa mogłaby wyglądać następująco:

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

Kod użyłem jest:

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

Jest to najłatwiejsze w przypadku Faraday:

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

# example with headers 
resource_size = response.headers['Content-Length'] 
Powiązane problemy