我想知道响应代码而不获取整个页面内容,因此我使用#request_head
。但我得到了#34; 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:在
<main>': undefined method
basic_auth&#39;对于#&lt; Net :: HTTP staging.new.inmyroom.ru:80
因为#basic_auth
属于另一个类:
connection = Net::HTTP::Get.new uri.host
没有#request_head
:
temp.rb:10:在
<main>': undefined method
request_head&#39; for#&lt; Net :: HTTP :: Get GET&gt; (NoMethodError)
答案 0 :(得分:1)
您可以使用HEAD
HTTP动词。
来自RFC2616:
该方法(HEAD)可用于获得关于请求所暗示的实体的元信息&gt;没有转移实体 - 身体本身。此方法通常用于测试超文本链接的有效性,可访问性和最近的修改。
类似的东西:
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
包含#<Net::HTTPOK 200 OK readbody=true>
个对象。
答案 1 :(得分:0)
我设法将Get
的标头传递给#request_head
,但其标题哈希值应该展平:
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