ruby - 在 Ruby 中是否有打开包含下划线的 URL 的解决方法?

标签 ruby open-uri

我正在使用 open-uri 打开 URL。

resp = open("http://sub_domain.domain.com")

如果它包含下划线,我会得到一个错误:

URI::InvalidURIError: the scheme http does not accept registry part: sub_domain.domain.com (or bad hostname?)

据我所知,这是因为根据 RFC,URL 只能包含字母和数字。有什么解决方法吗?

最佳答案

这看起来像是 URI 中的错误,而 uri-open、HTTParty 和许多其他 gem 都使用了 URI.parse。

解决方法如下:

require 'net/http'
require 'open-uri'

def hopen(url)
  begin
    open(url)
  rescue URI::InvalidURIError
    host = url.match(".+\:\/\/([^\/]+)")[1]
    path = url.partition(host)[2] || "/"
    Net::HTTP.get host, path
  end
end

resp = hopen("http://dear_raed.blogspot.com/2009_01_01_archive.html")

关于ruby - 在 Ruby 中是否有打开包含下划线的 URL 的解决方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5208851/

相关文章:

ruby - 用代码包围 Ruby 方法

ruby - `write' : "\xCF"从 ASCII-8BIT 到 UTF-8 (Encoding::UndefinedConversionError) 从 url 写入文件时

ruby - 使用ruby的open-uri访问特定站点时出现503错误

ruby-on-rails - Ruby on Rails - 如何通过 HTTPS 和基本身份验证保存远程文件

ruby - 如何在使用 Ruby 的 OpenUri 下载之前获取 HTTP header

ruby-on-rails - 为什么 form_with 会导致 Articles#new 中出现 NoMethodError?

ruby-on-rails - 管理员用户允许删除和编辑其他用户

ruby - 按值对嵌套哈希中的项目进行排序

ruby-on-rails - 在 Ruby 中处理无限日期(永远持续的事件)的正确方法是什么?

ruby - 如何找到包含此文本的标签?