繁体   English   中英

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

[英]How to get only the response code from a HTTP Request in Ruby

我有一个网址列表,我需要检查以下哪些网址有效。

我使用的代码是

require 'net/http'

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

在这里,我可以检查有效 url 的响应代码 200。我担心返回的“res”object 包含代码、正文等。所以我的响应(res 对象)变得很重。 有什么办法让我只能得到响应代码。 我不需要任何其他信息。 请帮忙

我没有检查是否可以使用Net :: HTTP,但你可以使用Curb,它是curl的Ruby包装器。 看看Curl::Easy#http_head

使用Net :: HTTP,您还可以使用HTTP#head ,它使用HEAD方法从服务器请求标头。

有关HTTP方法的信息HEAD:

9.4头

HEAD方法与GET相同,只是服务器不能在响应中返回消息体。 响应HEAD请求的HTTP头中包含的元信息应该与响应GET请求时发送的信息相同。 该方法可用于获得关于请求所暗示的实体的元信息,而无需转移实体主体本身。 此方法通常用于测试超文本链接的有效性,可访问性和最近的修改。

要获取页面的响应代码:

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

这在法拉第最简单:

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

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

我使用的代码是:

response = nil
Net::HTTP.start('upload.wikimedia.org', 80) {|http|
 response = http.head(url)
}
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
require "uri"
uri = URI my_url

require "net/http"
p Net::HTTP.start(URI(url).host, 443, use_ssl: true){ |http| break http.head uri.path }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM