:
#!/usr/bin/env python
import sys
from contextlib import closing as C
import pycurl
class Writer:
def __init__(self, file):
self.file = file
def write(self, data):
sys.stderr.write(data)
self.file.write(data)
def close(self):
self.file.close()
url = 'http://stackoverflow.com/questions/8909710/'
with C(pycurl.Curl()) as c, C(Writer(open('output','wb'))) as w:
c.setopt(c.URL, url)
c.setopt(c.WRITEFUNCTION, w.write)
c.setopt(c.FOLLOWLOCATION, True)
c.perform()
print >>sys.stderr, c.getinfo(c.HTTP_CODE), c.getinfo(c.EFFECTIVE_URL)
出典
2012-01-18 12:17:35
jfs
この分割はどのようにして行われますか? –
@Joseph Le Brech: 'w.write()'は、受信する必要のあるデータが受信されるとすぐにlibcurlによって呼び出されます。 1バイトにすることも、100KBにすることもできます。この関数の内部では、集約/スライスしてチャンクを取得することができます(チャンクの意味を問わない)。私は 'sys.stderr.write(data)'を追加しました。データが到着したときにそれを見ることができます。 – jfs
はチャンクで、サーバー側からのバッファリングを意味します。 –