Я делаю это для получения некоторых данных:
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()
Мои URL, как правило, такого рода:
http://host/path/to/resource-foo.xml
Обычно я возвращаюсь 302, указывая на:
http://archive-host/path/to/resource-foo.xml.gz
Учитывая, что я установил FOLLOWLOCATION и ENCODING gzip, все отлично работает.
Проблема в том, что иногда у меня есть URL, который не приводит к перенаправлению на сжатый ресурс. Когда это происходит, c.perform()
выдает эту ошибку:
pycurl.error: (61, 'Error while processing content unencoding: invalid block type')
Что наводит меня на мысль, что пикурл пытается заархивировать ресурс, который не был взломан.
Есть ли какой-нибудь способ, которым я могу поручить pycurl выяснить кодировку ответа и gunzip или нет в зависимости от ситуации? Я поиграл с использованием разных значений для ENCODING
, но пока нет бобов.
Документы Pycurl, похоже, немного не хватает. : /
ТНХ!