Come faccio ad elaborare un URL in Ruby per estrarre i componenti (schema, nome utente, password, padrone di casa, ecc)?

StackOverflow https://stackoverflow.com/questions/4274213

  •  28-09-2019
  •  | 
  •  

Domanda

Sto cercando di creare un programma usando rubino (e Net :: SSH) per connettersi ai server e di eseguire alcuni compiti. I dettagli del server sono da fornire come qualcosa di simile:

ssh://user:pass@host:port (for a host that does not yet have SSH keys)

o

user@host

Net :: SSH si aspetta il seguente formato:

Net::SSH.start('host', 'user', :password => "password")

È che ci sono gemma / stdlib in grado di elaborare l'URL in questo formato? O una semplice espressione regolare che può abbinare le diverse parti?

Nota:. Sono consapevole di, e l'uso, Capistrano ma in questo caso ho bisogno di abbassare il controllo di livello

È stato utile?

Soluzione

URI e indirizzabile :: URI grado di analizzare gli URL e ti permettono di suddividerle in loro componenti.

URI è incluso nella libreria standard di Ruby, che è bello, ma indirizzabile :: URI ha più funzioni, ed è quello che uso quando devo fare un sacco di lavoro su URL.

require 'addressable/uri'

uri = Addressable::URI.parse('ssh://user:pass@www.example.com:81') 
uri.host # => "www.example.com"
uri.user # => "user"
uri.password # => "pass"
uri.scheme # => "ssh"
uri.port # => 81

require 'uri'
uri = URI.parse('ssh://user:pass@www.example.com:81')
uri.host # => "www.example.com"
uri.user # => "user"
uri.password # => "pass"
uri.scheme # => "ssh"
uri.port # => 81

Altri suggerimenti

C'è un URI classe che dovrebbe aiutare. Potrebbe essere necessario sostituire il sistema ssh con http a mano prima, però, non credo che URI capisce lo schema ssh out of the box.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top