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

Jad*_*d S 3 python python-requests

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

我试图通过将GET请求的输出流式传输到POST请求的输入来寻找一种方法.

下面的文章讨论的NodeJS这样做.我如何使用Python请求执行此操作?

Mar*_*ers 6

您可以将原始连接对象从流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)
Run Code Online (Sandbox Code Playgroud)

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

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