Ruby uri模块解析产生nil

Ruby uri module parsing produces nil

我的 ruby 文件正在使用 Ruby uri 模块:

require 'uri'

def parse_uri(uri)           # uri       => www.google.com
    uriParsed = URI(uri)     # uriParsed => <URI::Generic 0x000000000 URL:www.google.com>
    uriHost = uriParsed.host # uriHost   => nil

documentation 中所述的预期行为应该为 uriHost 产生 google.com。然而,事实并非如此;我已经尝试重新启动我的 Rails 服务器,运行 bundle install,并要求 uri/http 但无济于事。有什么想法吗?


Ruby版本为2.1.4,rails版本为4.0.1

您需要指定协议:

parse_uri('http://www.google.com')

您忘记在 URI 上给 .path 打电话:

require 'uri'

def parse_uri(uri)           # uri       => www.google.com
    uriParsed = URI.parse(uri)     # uriParsed => <URI::Generic 0x000000000 URL:www.google.com>
    uriHost = uriParsed.path# uriHost   => nil

或.

def parse_uri(uri)           # uri       => www.google.com
    uriParsed = URI.parse(uri).path

实际上 URI(uri) returns 与用 .parse 调用它是同一个对象,所以它看起来有点多余。这是您使用 .path 而不是 .host:

的原始方法
def parse_uri(uri)           # uri       => www.google.com
    uriParsed = URI(uri)     # uriParsed => <URI::Generic 0x000000000 URL:www.google.com>
    uriHost = uriParsed.path# uriHost   => nil

最后,如果在 url 中包含 www. 前缀,而您想省略它,您可以这样做:

require 'uri'

def parse_uri(uri)           # uri       => www.google.com
    uriParsed = URI(uri)     # uriParsed => <URI::Generic 0x000000000 URL:www.google.com>
    uriHost = uriParsed.path# uriHost   => nil
    uriHost.start_with?('www.') ? uriHost[4..-1] : uriHost

end