我正在将 ebay sdk 移植到 python3,我偶然发现了以下问题。
我正在使用 pycurl 发送一些 HTTP 请求。这是我的配置方式:
self._curl = pycurl.Curl()
self._curl.setopt(pycurl.FOLLOWLOCATION, 1)
self._curl.setopt(pycurl.URL, str(request_url))
self._curl.setopt(pycurl.SSL_VERIFYPEER, 0)
self._response_header = io.StringIO()
self._response_body = io.StringIO()
self._curl.setopt(pycurl.CONNECTTIMEOUT, self.timeout)
self._curl.setopt(pycurl.TIMEOUT, self.timeout)
self._curl.setopt(pycurl.HEADERFUNCTION, self._response_header.write)
self._curl.setopt(pycurl.WRITEFUNCTION, self._response_body.write)
当我调用 self._curl.perform() 时,出现以下错误:
pycurl.error: (23, 'Failed writing body (1457 != 1460)')
据我所知,这意味着 write 函数存在问题,但我无法弄清楚它到底是什么。可能与从 StringIO 模块到 io 的迁移有关,但我不确定。
UPD:我尝试了以下方法:
def body(buf):
self._response_body.write(buf)
def header(buf):
self._response_header.write(buf)
self._curl.setopt(pycurl.HEADERFUNCTION, header)
self._curl.setopt(pycurl.WRITEFUNCTION, body)
它有效。我试图用 lambdas 做同样的技巧(而不是定义那些尴尬的函数,但它没有用。