Ruby 请求具有基本身份的头

Ruby 请求具有基本身份的头,ruby,http-headers,Ruby,Http Headers,我想知道响应代码而不需要获得整个页面内容,所以我使用;request\u head。但我得到“401”,所以我需要传递登录/密码: require "net/http" uri = URI.parse "http://example.com/some_path" connection = Net::HTTP.new(uri.host, 80) connection.basic_auth "qwe", "rty" p connection.request_head uri.path 但我

我想知道响应代码而不需要获得整个页面内容,所以我使用
;request\u head
。但我得到“401”,所以我需要传递登录/密码:

require "net/http"

uri = URI.parse "http://example.com/some_path"

connection = Net::HTTP.new(uri.host, 80)

connection.basic_auth "qwe", "rty"

p connection.request_head uri.path
但我明白了


temp.rb:9:in
':未定义的方法
basic#u auth',对于#您可以使用
HEAD
HTTP动词

从RFC2616:

此方法(HEAD)可用于获取由请求>隐含的实体的元信息,而无需传输实体体本身。此方法通常用于测试超文本链接的有效性、可访问性和最近的修改

诸如此类:

require "net/http"

uri = URI('YOUR_URL')

req = Net::HTTP::Head.new(uri)
req.basic_auth('USERNAME', 'PASSWORD')

res = Net::HTTP.start(uri.hostname, uri.port) do |http|
  http.request(req)
end

res
包含一个
对象。

我设法将
Get
的头传递给
#request_头
,但其头散列值应展平:

get = Net::HTTP::Get.new url

get.basic_auth "qwe", "rty"

fixed_header = Hash[ get.to_hash.map{ |k,v| [k,v[0]] } ]

Net::HTTP.start(uri.hostname, uri.port) do |http|
  p http.request_head(uri.path, fixed_header)
end

注意,如果您得到Errno::ECONNRESET:Connection reset by peer,只需将use_ssl选项添加到HTTP.start call Net::HTTP.start(uri.hostname,uri.port,use_ssl:uri.scheme==“https”)
get = Net::HTTP::Get.new url

get.basic_auth "qwe", "rty"

fixed_header = Hash[ get.to_hash.map{ |k,v| [k,v[0]] } ]

Net::HTTP.start(uri.hostname, uri.port) do |http|
  p http.request_head(uri.path, fixed_header)
end