我正在尝试使用 Ruby 通过 HTTP 加载网页并检查其状态代码是什么。我的代码如下所示:
require "net/http"
@r = Net::HTTP.get_response(URI.parse(myURL))
return @r.code
然而,对于某些 URL(主要是指向奇怪的东西,例如网络计数器,不会给出正确的响应),我得到了一个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
我对导致此异常的原因感到非常困惑。我希望有一个URI::InvalidURIError
,但不是这个。
给定一个公认的方案(例如http/https),将实例化一个更专业的类。否则会创建一个“通用”URI; “请求 URI”的想法仅对某些 URI 方案有意义。
Example:
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——仅此而已。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)