TypeError:必须可以转换为缓冲区,而不是HTTPResponse

Man*_*pta 1 python python-requests

我有一个从api连接获取pdf文件的函数.

我的代码:

label = fk.fetch_labels(oiids)
with open('a.pdf', 'wb') as handle:
    cont = label.raw
    print cont
    handle.write(cont)`
Run Code Online (Sandbox Code Playgroud)

fetch_labels:

def fetch_labels(self, orderItemIds):
    headers = {'Accept': 'application/octet-stream'}
    url = "https://api.flipkart.net/sellers/orders/shipments"
    payload = {'orderItemIds':','.join(orderItemIds)}
    return self.session.get(url, headers=headers, params=payload, stream=True)`
Run Code Online (Sandbox Code Playgroud)

在运行上面的代码它会抛出错误:

<urllib3.response.HTTPResponse object at 0x7f1d8fa24d50>
Traceback (most recent call last):
  File "test.py", line 23, in <module>
    handle.write(cont)
Run Code Online (Sandbox Code Playgroud)

TypeError:必须可以转换为缓冲区,而不是HTTPResponse`

当我使用'wb'将其写入pdf文件时,它只是创建一个0字节的文件.什么是正确的方式.

mac*_*ing 5

流媒体请求的文档:

使用requests.Response.iter_lines(),您可以轻松地迭代流式API,例如Twitter Streaming API.只需将stream设置为True并使用iter_lines()迭代响应

从那时起:

iter_lines(chunk_size=512, decode_unicode=None, delimiter=None)
Run Code Online (Sandbox Code Playgroud)

迭代响应数据,一次一行.当stream=True 在请求上设置时,这避免了立即将内容读入内存以获得大响应.

注意此方法不可重入安全.

所以你的代码可能会使用它:

with open('a.pdf', 'wb') as handle:
    handle.writelines(label.iter_lines())
Run Code Online (Sandbox Code Playgroud)