【问题标题】:how to use pycurl if requested data is sometimes gzipped, sometimes not?如果请求的数据有时被压缩,有时不被压缩,如何使用 pycurl?
【发布时间】:2010-10-19 23:37:27
【问题描述】:

我这样做是为了获取一些数据:

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()

我的网址通常是这样的:

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 文档似乎有点缺乏。 :/

谢谢!

【问题讨论】:

标签: python http gzip libcurl pycurl


【解决方案1】:

如果最坏的情况发生,您可以省略 ENCODING 'gzip',将 HTTPHEADER 设置为 {'Accept-Encoding' : 'gzip'},check the response headers 用于“Content-Encoding: gzip”,如果存在,则使用 gunzip自己回复。

【讨论】:

  • 感谢@Piskvor!我想我一定是在 09 年错过了你的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-29
  • 2012-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多