كيف يمكنني معالجة عنوان URL في Ruby لاستخراج أجزاء المكون (المخطط ، اسم المستخدم ، كلمة المرور ، المضيف ، إلخ)؟
سؤال
أحاول إنشاء برنامج باستخدام 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
مخطط خارج الصندوق.