在加载网页时:“未定义的方法`request_uri’为#”
我正在尝试使用Ruby通过HTTP加载网页并检查其状态代码是什么。 我的代码如下所示:
require "net/http" @r = Net::HTTP.get_response(URI.parse(myURL)) return @r.code
但是,对于某些URL(大多数指向像Web计数器这样不会给出正确响应的奇怪内容)我正在为undefined method request_uri for #
获取undefined method request_uri for #
。 我已经将它追溯到http.rb的第380行(我正在运行Ruby 1.8),它说:
def HTTP.get_response(uri_or_host, path = nil, port = nil, &block) if path host = uri_or_host new(host, port || HTTP.default_port).start {|http| return http.request_get(path, &block) } else uri = uri_or_host new(uri.host, uri.port).start {|http| return http.request_get(uri.request_uri, &block) <--- LINE 380 } end end
我很遗憾导致这个exception的原因。 我希望URI::InvalidURIError
,但不是这个。
给定一个公认的方案(例如http / https),将实例化一个更专业的类。 否则,创建“通用”URI; “请求URI”的概念仅对某些URI方案有意义。
例:
irb(main):001:0> require 'uri' => true irb(main):002:0> URI.parse('http://www.google.com/').class => URI::HTTP irb(main):003:0> URI.parse('https://www.google.com/').class => URI::HTTPS irb(main):004:0> URI.parse('foo://www.google.com/').class => URI::Generic irb(main):005:0> URI.parse('http://www.google.com/').respond_to?(:request_uri) => true irb(main):006:0> URI.parse('https://www.google.com/').respond_to?(:request_uri) => true irb(main):007:0> URI.parse('foo://www.google.com/').respond_to?(:request_uri) => false
因此,您正在解析的URI之一有一个奇怪的方案 – 即使它是一个有效的URI – 这就是全部。
首先,关于它为什么#
,我的猜测是这个错误出现在浏览器中,因此被认为是HTML。 尝试查看源代码并查看它是否不是#
。
至于错误,这听起来是正确的。 它只是意味着您正在使用的URI对象没有request_uri
方法。 也许你打算用path
?