محاولة الاتصال ب "Figest Authoration" Webservice باستخدام HTTPARTY أو NET: HTTP (أو إلخ)
سؤال
لقد كنت أحاول الاتصال بخدمة ويب تستخدم مصادقة Digest.
أنا قادر على الاتصال في Safari باستخدام المستخدم: password@service.site.com/endpoint
لقد حاولت في Ruby and Rails للاتصال باستخدام httparty والصافي: HTTP باستخدام خيارات "Auth" الأساسية "، ولكن لم يكن لديك أي حظ.
أتساءل عما إذا كان خيار httparty / net: خيار HTTP "Basic_Auth" سيكون متوافقا مع خدمة "Digest Auth"؟
إذا لم يكن الأمر كذلك، فهل هناك طريقة أخرى قد أتصل بها؟
المحلول
يبدو أن مصادقة HOVARTY الأساسية غير متوافقة مع Digest_Auth. لقد وجدت هذه الشبكة: امتداد HTTP: https://codesniplepets.joyent.com/posts/show/1075. واكتب طريقة للتعامل مع هذا، بمساعدة جوهرة الكراك http://github.com/jnunemaker/crack.:
def self.decode vin
url = URI.parse(APP_CONFIG[:vinlink_url])
Net::HTTP.start(url.host) do |http|
res = http.head(url.request_uri)
req = Net::HTTP::Get.new("/report?type=basic&vin=#{vin}")
req.digest_auth(APP_CONFIG[:vinlink_login], APP_CONFIG[:vinlink_password], res)
@response = http.request(req)
end
if @response.code == "200"
hash = Crack::XML.parse(@response.body).recursive_downcase_keys!.recursive_symbolize_keys!
end
end
نصائح أخرى
لم يكن قادرا على الوصول إلى رابط CodesNippets المذكور أعلاه اليوم، ولكن الكود متاح أيضا هنا https://gist.github.com/73102.. وبعد لقد استخدمت هذا بنجاح لأصاد مصادقة Digest، ولكن ركض في مشاكل مع طلبات متعددة، والحصول على أخطاء "العميل غير النظير العميل" - حلها عن طريق إنشاء وظيفة جديدة داخل وظيفة Digest_Auth في كل مرة تم استدعاؤها. لم تجد الكثير على ذلك عندما نظرت، لذلك آمل أن يساعد هذا شخص ما.