gpt4 book ai didi

Ruby URL.parse 错误

转载 作者:数据小太阳 更新时间:2023-10-29 07:21:49 24 4
gpt4 key购买 nike

这是我的 ruby 程序

require 'net/http'
require 'uri'

begin
url = URI.parse("http://google.com")
rescue Exception => err
p err
exit
end

http = Net::HTTP.new(url.host, url.port)
res = http.head("/")
p res.code

它工作正常,但是如果我从 URL.parse() 中删除 http://,它会给我这个错误:

/usr/lib/ruby/1.9.1/net/http.rb:1196:in `addr_port': undefined method `+' for nil:NilClass (NoMethodError) ...
from /usr/lib/ruby/1.9.1/net/http.rb:1094:in `request'
from /usr/lib/ruby/1.9.1/net/http.rb:860:in `head'

这是处理异常的正确方法吗?

我知道 URL 可能不正确,但它应该引发异常 URI::InvalidURIError 而不是接受并继续程序?

最佳答案

如果你说 u = URI.parse('http://google.com'),你会得到一个 URI::HTTPu.port 的默认值为 80。如果你说 u = URI.parse('google.com'),你会得到一个 URI::返回 u.port 的 Generic 将是 nilu.host 也是如此。

所以,当你这样做时:

url  = URI.parse('google.com')
http = Net::HTTP.new(url.host, url.port)

你真的在这样做:

http = Net::HTTP.new(nil, nil)

Net::HTTP 一点也不喜欢。你可以尝试这样的事情:

if(str.to_s.empty?)
# complain loudly about a missing str
end
begin
url = URI.parse(str)
url = URI.parse('http://' + str) if !url.scheme

if(url.scheme != 'http' && url.scheme != 'https')
# more complaining about bad input
end

http = Net::HTTP.new(url.host, url.port)
#...
rescue URI::Error => e
# even yet more complaining
end

这类事情应该完全绕过异常并涵盖您可能感兴趣的其他一些事情。

关于Ruby URL.parse 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7495034/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com