0

我有一个 Python 脚本,它产生一些数据。我想使用 POST 将其流式传输到 HTTP 服务器。也就是说,我不想在缓冲区中累积数据然后发送它——我只想在它创建时发送它。会有很多。

显而易见的方法是以某种方式打开 HTTP 连接,返回一个可写文件对象,将数据写入该对象,然后关闭连接。

但是,对我来说,我查看过的任何库( 、 和 )都支持这一点urllib2并不httplib明显requests

我怎样才能做到这一点?

4

2 回答 2

1

这个可写对象无论如何都必须缓冲数据 - 没有可流式传输的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())
于 2013-03-30T00:32:12.060 回答
-1

您不会通过 urllib2 / urllib 获得可写文件对象。返回值是一个支持迭代和读取的“类文件”对象。如果您可以读取内容并创建自己的文件对象进行写入。

于 2013-03-29T19:46:59.787 回答