سؤال

لم يذكروا هذا في وثائق بيثون. وفي الآونة الأخيرة ، أقوم باختبار موقع ويب ببساطة ينعش الموقع باستخدام 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 لا تُرجع البيانات التي لا معنى لها.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top