هل urllib2.Urlopen () ذاكرة التخزين المؤقت؟
سؤال
لم يذكروا هذا في وثائق بيثون. وفي الآونة الأخيرة ، أقوم باختبار موقع ويب ببساطة ينعش الموقع باستخدام urllib2.urolopen () لاستخراج محتوى معين ، ألاحظ أحيانًا عند تحديث الموقع urllib2.Urlopen () لا يحصل على المحتوى المضافة حديثًا. لذلك أتساءل أنه يقوم بتخزين ذاكرة التخزين المؤقت في مكان ما ، أليس كذلك؟
المحلول
لذلك أتساءل أنه يقوم بتخزين ذاكرة التخزين المؤقت في مكان ما ، أليس كذلك؟
لا.
إذا لم ترى بيانات جديدة ، فقد يكون لهذا أسباب عديدة. تستخدم معظم خدمات الويب الأكبر تخزينًا للتخزين المؤقت لأداء الخادم لأسباب الأداء ، على سبيل المثال باستخدام وكلاء التخزين المؤقت مثل الورنيش والحبار أو التخزين المؤقت على مستوى التطبيق.
إذا كانت المشكلة ناتجة عن التخزين المؤقت من جانب الخادم ، فلا توجد وسيلة لعمل الخادم على إعطائك أحدث البيانات.
لتخزين الوكلاء مثل الحبار ، الأمور مختلفة. عادة ، يضيف الحبار بعض الرؤوس الإضافية إلى استجابة HTTP (response().info().headers
).
إذا رأيت حقل رأس يسمى X-Cache
أو X-Cache-Lookup
, ، هذا يعني أنك لست متصلاً بالخادم البعيد مباشرة ، ولكن من خلال وكيل شفاف.
إذا كان لديك شيء مثل: X-Cache: HIT from proxy.domain.tld
, ، هذا يعني أن الاستجابة التي حصلت عليها تم تخزينها مؤقتًا. العكس هو X-Cache MISS from proxy.domain.tld
, مما يعني أن الاستجابة جديدة.
نصائح أخرى
سؤال قديم للغاية ، لكن كان لدي مشكلة مماثلة لم يحلها هذا الحل.
في حالتي ، اضطررت إلى محادثة وكيل المستخدم مثل هذا:
request = urllib2.Request(url)
request.add_header('User-Agent', 'Mozilla/5.0')
content = urllib2.build_opener().open(request)
أتمنى أن يساعد هذا أي شخص ...
قد يكون خادم الويب الخاص بك أو وكيل HTTP هو محتوى التخزين المؤقت. يمكنك محاولة تعطيل التخزين المؤقت بإضافة أ Pragma: no-cache
طلب رأس:
request = urllib2.Request(url)
request.add_header('Pragma', 'no-cache')
content = urllib2.build_opener().open(request)
إذا قمت بإجراء تغييرات واختبرت السلوك من المتصفح ومن Urllib ، فمن السهل ارتكاب خطأ غبي. في المتصفح ، تم تسجيل الدخول ، ولكن في urllib.rlopen ، يمكن للتطبيق الخاص بك إعادة توجيهك دائمًا إلى نفس صفحة تسجيل الدخول ، لذلك إذا رأيت فقط حجم الصفحة أو الجزء العلوي من التصميم المشترك ، يمكنك أن تفكر في أن التغييرات الخاصة بك لها تأثير.
أجد صعوبة في تصديق أن urllib2 لا يقوم بالتخزين المؤقت ، لأنه في حالتي ، عند إعادة تشغيل البرنامج ، يتم تحديث البيانات. إذا لم تتم إعادة تشغيل البرنامج ، فيبدو أن البيانات يتم تخزينها مؤقتًا إلى الأبد. كما أن استرداد البيانات نفسها من Firefox لا تُرجع البيانات التي لا معنى لها.