Question

Ils ne sont pas le mentionner dans la documentation de python. Et récemment, je teste un site tout simplement rafraîchissant le site en utilisant urllib2.urlopen () pour extraire certains contenus, je remarque parfois quand je mets à jour le urllib2.urlopen du site () semble pas obtenir le contenu nouvellement ajouté. Je me demande donc il fait des trucs de cache quelque part, non?

Était-ce utile?

La solution

  

Je me demande ce fait des choses de cache quelque part, non?

Il ne fonctionne pas.

Si vous ne voyez pas de nouvelles données, cela pourrait avoir de nombreuses raisons. La plupart des plus grands services Web utilisent la mise en cache côté serveur pour des raisons de performances, par exemple en utilisant des procurations de mise en cache comme Squid ou Varnish et la mise en cache de niveau application.

Si le problème est causé par la mise en cache côté serveur, usally il n'y a aucun moyen de forcer le serveur pour vous donner les dernières données.


Pour la mise en cache proxy comme Squid, les choses sont différentes. , Calmars ajoute généralement des en-têtes supplémentaires à la réponse HTTP (response().info().headers).

Si vous voyez un champ d'en-tête appelé X-Cache ou X-Cache-Lookup, cela signifie que vous n'êtes pas connecté au serveur distant directement, mais via un proxy transparent.

Si vous avez quelque chose comme: X-Cache: HIT from proxy.domain.tld, cela signifie que la réponse que vous avez obtenu est mis en cache. L'inverse est X-Cache MISS from proxy.domain.tld, ce qui signifie que la réponse est fraîche.

Autres conseils

question ancienne, mais j'eu un problème similaire que cette solution n'a pas résolu.
Dans mon cas, je devais usurper l'User-Agent comme ceci:

request = urllib2.Request(url)
request.add_header('User-Agent', 'Mozilla/5.0')
content = urllib2.build_opener().open(request)

Hope this helps personne ...

Votre serveur web ou un proxy HTTP peut être contenu en cache. Vous pouvez essayer de désactiver la mise en cache en ajoutant un en-tête de demande de Pragma: no-cache:

request = urllib2.Request(url)
request.add_header('Pragma', 'no-cache')
content = urllib2.build_opener().open(request)

Si vous apportez des modifications et de tester le comportement du navigateur et de urllib, il est facile de faire une erreur stupide. Dans le navigateur que vous êtes connecté, mais urllib.urlopen votre application vous pouvez toujours rediriger à la même page de connexion, donc si vous voyez juste la taille de la page ou le haut de votre mise en page commune, vous pouvez penser que vos modifications ont aucun effet.

Je trouve difficile de croire que urllib2 ne fait pas la mise en cache, parce que dans mon cas, lors du redémarrage du programme des données est mise à jour. Si le programme ne redémarre pas, les données semblent être mis en cache pour toujours. récupérer également les mêmes données de Firefox ne retourne jamais de données périmées.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top