gpt4 book ai didi

python - Pycurl 和 io.StringIO - pycurl.error : (23, '写入正文失败)

转载 作者:太空狗 更新时间:2023-10-29 17:40:23 27 4
gpt4 key购买 nike

我正在将 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)')

据我所知,这意味着写入函数存在问题,但我无法弄清楚它到底是什么。可能与从 StringIO 模块迁移到 io 有关,但我不确定。

更新:我试过以下方法:

    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)

并且有效。我尝试用 lambda 做同样的事情(而不是定义那些笨拙的函数,但它没有用。

最佳答案

我认为问题在于 pycurl 不再像期望的那样与 StringIO 一起工作。一种解决方案是改用 io.BytesIO。然后,您可以获取写入缓冲区的信息并将其解码为字符串。

使用 BytesIO 和 pycurl 而不是 StringIO:

e = io.BytesIO()
c.setopt(pycurl.WRITEFUNCTION, e.write)

从 BytesIO 对象解码字节信息:

htmlString = e.getvalue().decode('UTF-8')

您可以使用任何类型的解码,但这应该会为您提供一个可以解析的字符串对象。

希望这对使用 Python 3 的人有所帮助。

关于python - Pycurl 和 io.StringIO - pycurl.error : (23, '写入正文失败),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19606447/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com