يتجاهل Urllib طلبات المصادقة
سؤال
أواجه القليل من المتاعب في إنشاء برنامج نصي يعمل مع عناوين URL. أنا أستخدم urllib.urlopen () للحصول على محتوى عنوان URL المطلوب. لكن بعض عناوين URL هذه تتطلب المصادقة. ويطالبني URLOPEN بالكتابة في اسم المستخدم الخاص بي ثم كلمة المرور. ما أحتاجه هو تجاهل كل عنوان URL الذي سيتطلب المصادقة ، فقط تخطيها والمتابعة ، هل هناك طريقة للقيام بذلك؟ كنت أتساءل عن اصطياد استثناء httperror ، ولكن في الواقع ، يتم التعامل مع الاستثناء من خلال طريقة urlopen () ، لذلك فهو لا يعمل.
شكرا على كل رد.
المحلول
أنت محق في urllib2.HTTPError
استثناء:
exception urllib2.HTTPError
على الرغم من كونه استثناءً (فئة فرعية من urlerror) ، إلا أن httperror يمكن أن تعمل أيضًا كقيمة إرجاع غير مستثمرة تشبه الملف (نفس الشيء الذي يعود إليه urlopen ()). هذا مفيد عند التعامل مع أخطاء HTTP الغريبة ، مثل طلبات المصادقة.
code
رمز حالة HTTP كما هو محدد في RFC 2616. تتوافق هذه القيمة الرقمية مع قيمة موجودة في قاموس الرموز كما هو موجود في basehttpserver.basehttprequesthandler.responses.
يمكن استخدام سمة التعليمات البرمجية للاستثناء للتحقق من أن المصادقة مطلوبة - الكود 401.
>>> try:
... conn = urllib2.urlopen('http://www.example.com/admin')
... # read conn and process data
... except urllib2.HTTPError, x:
... print 'Ignoring', x.code
...
Ignoring 401
>>>