私はいくつかのデータを取得するためにこれをやっています:
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 を設定したことを考えると、すべてがうまく機能します。
問題は、gzip されたリソースへのリダイレクトにならない URL がある場合があることです。これが発生すると、次のc.perform()
エラーがスローされます。
pycurl.error: (61, 'Error while processing content unencoding: invalid block type')
これは、pycurl が gzip されていないリソースを gunzip しようとしていることを示唆しています。
pycurl に応答エンコーディングと gunzip を適切に判断するように指示する方法はありますか? にさまざまな値を使用して遊んでみましENCODING
たが、これまでのところ Bean はありません。
pycurl のドキュメントが少し不足しているようです。:/
どうも!