سؤال

أواجه القليل من المتاعب في إنشاء برنامج نصي يعمل مع عناوين 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
>>> 
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top