Je fais cela pour aller chercher des données:comment utiliser pycurl si les données demandées sont parfois gzippées, parfois non?
c = pycurl.Curl()
c.setopt(pycurl.ENCODING, 'gzip')
c.setopt(pycurl.URL, url)
c.setopt(pycurl.TIMEOUT, 10)
c.setopt(pycurl.FOLLOWLOCATION, True)
xml = StringIO()
c.setopt(pycurl.WRITEFUNCTION, xml.write)
c.perform()
c.close()
Mes urls sont généralement de ce genre:
http://host/path/to/resource-foo.xml
Habituellement je reviens 302 pointant vers:
http://archive-host/path/to/resource-foo.xml.gz
Compte tenu que j'ai mis FOLLOWLOCATION, et ENCODING gzip, tout fonctionne très bien. Le problème est, parfois j'ai une URL qui n'aboutit pas à une redirection vers une ressource gzippée. Lorsque cela se produit, c.perform()
jette cette erreur:
pycurl.error: (61, 'Error while processing content unencoding: invalid block type')
Ce qui me porte à croire que pycurl tente de gunzip une ressource qui ne gzip.
Y a-t-il un moyen de demander à pycurl de comprendre le codage de la réponse, et gunzip ou non, selon le cas? J'ai joué avec l'utilisation de différentes valeurs pour ENCODING
, mais jusqu'à présent, aucun haricot.
La documentation de pycurl semble faire un peu défaut. :/
thx!
Le curling automatique n'est-il pas possible? http://stackoverflow.com/a/6711166/582917 – CMCDragonkai