我有一个 Python 脚本,它产生一些数据。我想使用 POST 将其流式传输到 HTTP 服务器。也就是说,我不想在缓冲区中累积数据然后发送它——我只想在它创建时发送它。会有很多。
显而易见的方法是以某种方式打开 HTTP 连接,返回一个可写文件对象,将数据写入该对象,然后关闭连接。
但是,对我来说,我查看过的任何库( 、 和 )都支持这一点urllib2
并不httplib
明显requests
。
我怎样才能做到这一点?
这个可写对象无论如何都必须缓冲数据 - 没有可流式传输的HTTP POST。在这种情况下,您将不得不查看 HTTP POST 之外的其他内容。
为什么不使用 StringIO 或其他东西缓冲数据,然后 POST 数据。可以清理以下代码,但这是一个使用的骨架requests
:
import requests
import StringIO
class HttpPostWritable(object):
def __init__(self, url, init_buffer=''):
self._url = url
self._buffer = StringIO.StringIO(init_buffer)
def write(self, data):
self._buffer.write(data)
def close(self):
requests.post(self._url, self._buffer.getvalue())
您不会通过 urllib2 / urllib 获得可写文件对象。返回值是一个支持迭代和读取的“类文件”对象。如果您可以读取内容并创建自己的文件对象进行写入。