我有一个 BytesIO,我正在向其中添加各种字节。我想通过 request.add_data 方法在 urllib2.Request 中发送它。我该怎么做呢?当我尝试
# create request ....
bytesio = BytesIO()
bytesio.write(open("C:\img.jpg", "rb").read())
request.add_data(bytesio.getvalue())
bytesio.close()
urllib2.urlopen(request) # error "expected buffer, got bytes"
我究竟做错了什么?我是 Python 新手,不知道如何从 BytesIO 创建缓冲区。另外,当我尝试时:
request.add_data(bytesio) # instead of bytesio.getvalue()
我收到“对已关闭文件的 I/O 操作”。如果我尝试等到 urlopen 之后调用 bytesio.close,那么请求就会挂起,因为它正在等待关闭 bytesio。
我需要做什么?
回答
request.add_data(str(btyesio.getvalue()))
bytesio.close()
投到一根弦上让它很开心。我没有尝试查看它是否都适用于 StringIO,也没有尝试过 Python 2.x 和 3.x 之间的差异。