urllib2.urlopen()キャッシュのものはありますか?
質問
彼らはこれをPythonのドキュメントで言及していませんでした。そして最近、私はurllib2.urlopen()を使用してサイトを単に更新して特定のコンテンツを抽出するウェブサイトをテストしています。サイトを更新すると、新しく追加されたコンテンツを取得していないようです。だから私はそれがどこかに物をキャッシュしているのだろうか?
解決
だから私はそれがどこかに物をキャッシュしているのだろうか?
そうではありません。
新しいデータが表示されない場合、これには多くの理由があります。ほとんどの大きなWebサービスは、パフォーマンス上の理由でサーバー側のキャッシュを使用します。たとえば、ワニスやイカなどのキャッシュプロキシやアプリケーションレベルのキャッシュを使用しています。
問題がサーバー側のキャッシュによって引き起こされた場合、ユーザーには、サーバーに最新のデータを提供させる方法はありません。
Squidのようなプロキシをキャッシュすると、物事は異なります。通常、Squidは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)
これが誰でも役立つことを願っています...
WebサーバーまたはHTTPプロキシは、キャッシュコンテンツになっている場合があります。 Aを追加してキャッシュを無効にしようとすることができます Pragma: no-cache
リクエストヘッダー:
request = urllib2.Request(url)
request.add_header('Pragma', 'no-cache')
content = urllib2.build_opener().open(request)
変更を加えてブラウザとurllibから動作をテストすると、愚かな間違いを犯すのは簡単です。ブラウザではログインしていますが、urllib.urlopenでは、アプリを同じログインページに常にリダイレクトできます。したがって、ページサイズまたは共通のレイアウトの上部が表示された場合、変更には影響がないと思われる場合があります。
私の場合、プログラムを再起動するとデータが更新されるため、urllib2がキャッシュをしないと信じるのは難しいと思います。プログラムが再起動されていない場合、データは永遠にキャッシュされているように見えます。また、Firefoxから同じデータを取得することは、古いデータを返すことはありません。