Ich tue dies einige Daten zu holen:wie pycurl verwenden, wenn angeforderte Daten manchmal gezippt werden, manchmal nicht?
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()
Mein Urls typisch dieser Art sind:
http://host/path/to/resource-foo.xml
I 302 Normalerweise zurück zeigt auf:
http://archive-host/path/to/resource-foo.xml.gz
Gegeben dass ich FOLLOWLOCATION und ENCODING gzip eingestellt habe, funktioniert alles super.
Das Problem ist, manchmal habe ich eine URL, die nicht zu einer Umleitung auf eine gezippte Ressource führt. Wenn dies geschieht, wirft c.perform()
diesen Fehler:
pycurl.error: (61, 'Error while processing content unencoding: invalid block type')
Was mir schlägt vor, dass pycurl versucht, eine Ressource gunzip, die nicht im gzip ist.
Gibt es eine Möglichkeit, wie ich pycurl anweisen kann, die Antwortcodierung herauszufinden, und gunzip oder nicht? Ich habe mit verschiedenen Werten für ENCODING
herum gespielt, aber bisher keine Bohnen.
Die pycurl docs scheint ein wenig zu fehlen. :/
thx!
Ist es nicht möglich, den Code automatisch zu codieren? http://Stackoverflow.com/a/6711166/582917 – CMCDragonkai