2

私はいくつかのデータを取得するためにこれをやっています:

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 のドキュメントが少し不足しているようです。:/

どうも!

4

1 に答える 1

5

最悪の場合は、ENCODING 'gzip' を省略し、HTTPHEADER を {'Accept-Encoding' : 'gzip'} に設定し、 "Content-Encoding: gzip"の応答ヘッダーを確認し、存在する場合は応答を gunzip します。あなた自身。

于 2009-04-16T22:20:21.433 に答える