如何使用Python请求获取文件并将其流式传输到POST请求中?

时间:2017-12-13 18:42:41

标签: python python-requests

我正在尝试编写一个执行GET请求的函数来从服务器A下载文件,然后立即将文件POST到服务器B.

我正在尝试通过将GET请求的输出流式传输到POST请求的输入来寻找方法。

following article讨论在nodeJS中执行此操作。我如何使用Python请求执行此操作?

1 个答案:

答案 0 :(得分:5)

您可以将原始连接对象从流式GET请求传递给POST请求:

r = requests.get(get_url, stream=True)
if r.status_code == 200:
    r.raw.decode_content = True  # decompress as you read
    files = {
        'fieldname': ('filename', r.raw, r.headers['Content-Type'])
    }
    requests.post(post_url, files=files)

默认情况下,使用response.raw类文件对象不会解码压缩响应(使用GZIP或deflate),但是您可以通过设置decode_content属性强制它为您解压缩到True(请求将其设置为False以控制解码本身。)

我假设该文件是作为multipart/form-data请求的一部分进行POST的。如果您需要直接发布数据,请改用data=r.raw