请求将迭代器或生成器作为数据参数,详细信息在
Chunk-Encoded Requests中描述.在这种情况下,传输编码需要分块,因为事先不知道数据大小.
这是一个使用queue.Queue的非常简单的示例,可以用作类似文件的对象进行编写:
import requests
import queue
import threading
class WriteableQueue(queue.Queue):
def write(self, data):
# An empty string would be interpreted as EOF by the receiving server
if data:
self.put(data)
def __iter__(self):
return iter(self.get, None)
def close(self):
self.put(None)
# quesize can be limited in case producing is faster then streaming
q = WriteableQueue(100)
def post_request(iterable):
r = requests.post("http://httpbin.org/post", data=iterable)
print(r.text)
threading.Thread(target=post_request, args=(q,)).start()
# pass the queue to the serializer that writes to it ...
q.write(b'1...')
q.write(b'2...')
# closing ends the request
q.close()