我在python中有一个curl请求,它向writefunction(CURLOPT_WRITEFUNCTION)输出大量数据。如果满足某个条件,我希望能够从writefunction中取消curl请求。我已经尝试过使用ch.close(),但是错误说它在执行时无法关闭请求。还有其他方法让它停止写函数吗?继承我的代码:
self.ch = pycurl.Curl()
self.ch.setopt(pycurl.URL, file_url)
self.ch.setopt(pycurl.CONNECTTIMEOUT, 60)
self.ch.setopt(pycurl.WRITEFUNCTION, self.WriteWrapper)
self.ch.setopt(pycurl.HEADERFUNCTION, self.ParseHeaders)
self.ch.setopt(pycurl.FOLLOWLOCATION, True)
self.ch.setopt(pycurl.COOKIE, cookies[file_host])
self.ch.setopt(pycurl.HTTPHEADER, self.headers_received)
self.ch.perform()
self.ch.close()
def do_POST(self):
return self.do_GET()
def WriteWrapper(self, data):
if self.do_curl_request:
try:
return self.wfile.write(data)
except:
self.ch.close() # This doesn't work :(
答案 0 :(得分:2)
pycurl会引发错误,因此返回-1或在write函数内引发异常将导致它引发pycurl.error。请注意,返回“无”将被解释为'all bytes written'.
>>> class Writer:
... def __init__(self):
... self.count = 0
... def write(self, data):
... print "Write called", len(data)
... return -1
...
>>> curl = pycurl.Curl()
>>> writer = Writer()
>>> curl.setopt(pycurl.WRITEFUNCTION, writer.write)
>>> curl.setopt(pycurl.URL, "file:///some_big_file.txt")
>>> curl.perform()
Write called 16383
pycurl.error: invalid return value for write callback -1 16383
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
pycurl.error: (23, 'Failed writing body (0 != 16383)')