2016-05-24 7 views
1

Meine Rubin-Datei wird die Ruby-uri Modul als solche mit:Ruby-uri Modul Parsing produziert nil

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 

Erwartetes Verhalten gemäß der documentation angegeben sollte google.com für uriHost produzieren. Dies ist jedoch nicht der Fall. Ich habe versucht, meinen Rails-Server neu zu starten, der bundle install ausführt und uri/http erfordert, aber ohne Erfolg. Irgendwelche Ideen?


Ruby-Version ist 2.1.4, Schienen Version 4.0.1

+0

hey, und wenn Sie Ich möchte das Präfix "www." auslesen. Ich schreibe jetzt etwas auf, um das zu tun. – Cyzanfar

Antwort

0

Sie .path zu nennen vergessen auf URI:

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 

ODER.

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

Eigentlich gibt URI(uri) das gleiche Objekt, als es mit .parse Aufruf, so dass es ein wenig überflüssig erscheinen. Hier ist Ihr ursprünglicher Ansatz mit .path statt .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 

Schließlich, wenn Sie den www. Präfix weglassen wollen, wenn die URL enthält Sie etwas tun können:

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 
+0

'.path' gibt zurück, wofür ich' .host' gedacht habe. Nicht sicher, warum das Dokument angibt, dass ".path" nur den relativen Pfadnamen des URI zurückgibt. Ich testete mit 'http: // google.com/test/test' mit' .path', die 'google.com/test/test' anstelle von'/test/test/' – Xenyal

+0

holten. Letzte Änderungen an meiner Antwort vorgenommen :) – Cyzanfar

1

Sie müssen Protokoll angeben ist:

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

Ich versuche, eine gültige URL zu analysieren. Das wäre eine Vereinigung von 'www.google.com',' http: // www.google.com', 'google.com'. – Xenyal

+0

@Xenyal Ihre Definition von "gültig" widerspricht stark dem, was tatsächlich gültig ist. Sie müssen Zeichenfolgen wie "www.google.com" mit "http: //" voranstellen, da dies nur ein blanker Hostname und keine URL ist. – tadman

+0

@tadman Du hast Recht. Was ich meinte, war eine Zeichenfolge, die von einem Browser zum Erstellen einer URL verwendet werden kann. – Xenyal