كيف يمكنني معالجة عنوان URL في Ruby لاستخراج أجزاء المكون (المخطط ، اسم المستخدم ، كلمة المرور ، المضيف ، إلخ)؟

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

  •  28-09-2019
  •  | 
  •  

سؤال

أحاول إنشاء برنامج باستخدام Ruby (و Net :: SSH) للاتصال بالخوادم وأداء بعض المهام. يجب توفير تفاصيل الخادم كشيء مثل:

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

أو

user@host

Net :: SSH يتوقع التنسيق التالي:

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

هل هناك جوهرة/stdlib يمكنها معالجة عنوان URL في هذا التنسيق؟ أو regex بسيطة يمكن أن تطابق الأجزاء المختلفة؟

ملاحظة: أنا على دراية ، وأستخدم Capistrano ولكن في هذه الحالة ، أحتاج إلى تحكم منخفض المستوى.

هل كانت مفيدة؟

المحلول

كلاهما أوري و قابلة للعنونة :: uri يمكن تحليل عناوين URL والسماح لك بتقسيمها إلى مكوناتها.

يتم تضمين URI في مكتبة Ruby القياسية ، وهي لطيفة ، ولكن معالجة :: يمتلك URI المزيد من الميزات ، وهو ما أستخدمه عندما يتعين علي القيام بالكثير من العمل على عناوين 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

نصائح أخرى

هناك أوري الفصل الذي يجب أن يساعد. قد تضطر إلى استبدال ssh مخطط مع http باليد أولاً ، لا أعتقد URI يفهم ssh مخطط خارج الصندوق.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top