Я делаю это, чтобы получить некоторые данные:
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-адрес, который не приводит к перенаправлению на ресурс, сжатый gzip. Когда это происходит, c.perform()
выдает эту ошибку:
pycurl.error: (61, 'Error while processing content unencoding: invalid block type')
Что наводит меня на мысль, что pycurl пытается заархивировать ресурс, который не заархивирован.
Есть ли способ, которым я могу поручить pycurl выяснить кодировку ответа, а также gunzip или нет? Я экспериментировал с использованием разных значений для ENCODING
, но до сих пор не использовал bean-компоненты.
Документов pycurl, кажется, немного не хватает. :/
Спасибо!