使用Python请求进行流式上传

时间:2014-07-11 15:21:08

标签: python python-requests

我想流式传输"无限" (即连续)使用HTTP Post的数据量。基本上,我想发送POST请求标头,然后流内容(内容长度未知)。我查看http://docs.python-requests.org/en/latest/user/advanced/,似乎有设施。我遇到的一个问题是它在文件中说#34;要进行流式传输和上传,只需为您的身体提供类似文件的对象即可。什么"类似文件"对象的意思?我希望流式传输的数据来自传感器。如何实现"类文件"将从传感器读取数据并将其传递给调用者的对象?

对不起我在这里的无知,但我感觉我的方式通过python(即我一起学习。嗯..看起来像一条蛇。它感觉滑溜。试图避免生物的结束......: - ))。

提前感谢您的帮助。

朗高。

2 个答案:

答案 0 :(得分:1)

只是想给你一个答案,以便你可以关闭你的问题:

听起来你真正想要的是python websockets。在内部,您发出HTTP请求以升级到websocket的连接,并且在握手之后您可以自由地以两种方式流式传输数据。 Python使这很简单,for example

from flask import Flask 

from flask_sockets import Sockets

app = Flask(__name__) 
sockets = Sockets(app)

@sockets.route('/echo') 
def echo_socket(ws): 
    while True: 
        message = ws.receive() 
        ws.send(message)

@app.route('/') 
def hello(): 
    return 'Hello World!'

Websockets确实支持全双工通信,但您似乎只对服务器到客户端部分感兴趣。在这种情况下,您可以使用ws.send()来传输数据。我不确定这是否是您正在寻找的,但它应该提供解决方案。

答案 1 :(得分:0)

类文件对象是一个带有" read"的对象。接受大小并为下一个数据块返回二进制数据缓冲区的方法。

如果您想从文件系统中读取,那么看起来就像文件对象一样。

另一个常见的情况是StringIO类,它读写缓冲区。

在您的情况下,您需要实现一个"类似文件的对象"你自己,只需从传感器读取。

class Sensor(object):
    def __init__(self, sensor_thing)
        self.sensor_thing = sensor_thing

    def read(self, size):
        return self.convert_to_binary(self.sensor_thing.read_from_sensor())

    def convert_to_binary(self, sensor_data)
        ....