如何在Ruby中仅从HTTP请求获取响应代码

如何在Ruby中仅从HTTP请求获取响应代码,ruby,http,httpwebrequest,http-headers,httpresponse,Ruby,Http,Httpwebrequest,Http Headers,Httpresponse,我有一个URL列表,我需要检查以下哪些URL是有效的 我使用的代码是 require 'net/http' url = 'http://mysite.com' res = Net::HTTP.get_response(URI.parse(url.to_s)) puts res.code 在这里,我可以检查响应代码200中的有效url。我关心的是返回的“res”对象包含代码、主体等,因此我的响应(res对象)变得沉重。有没有办法让我只得到响应代码。我不需要任何其他信息。请帮助我没有检查是否可以

我有一个URL列表,我需要检查以下哪些URL是有效的

我使用的代码是

require 'net/http'

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

在这里,我可以检查响应代码200中的有效url。我关心的是返回的“res”对象包含代码、主体等,因此我的响应(res对象)变得沉重。有没有办法让我只得到响应代码。我不需要任何其他信息。请帮助

我没有检查是否可以使用Net::HTTP,但是您可以使用curl的Ruby包装。 看

对于Net::HTTP,您还可以使用,它使用HEAD方法从服务器请求头

有关HTTP方法头的信息:

9.4头

HEAD方法与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

HEAD请求可能如下所示:

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
我使用的代码是:

response = nil
Net::HTTP.start('upload.wikimedia.org', 80) {|http|
 response = http.head(url)
}
puts response.code
这在以下方面最简单:

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

# example with headers
resource_size = response.headers['Content-Length']