python restful接口返回文件,Python:从RestAPI下载zip文件

博主在尝试通过Python Flask创建一个简单的仪表板来下载第三方服务器的日志文件。他们遇到了一个错误,当从浏览器访问Flask应用时,请求返回了一个'NoneType'对象没有'close'属性的错误。通过调试,发现`res.content`包含了二进制数据。最终,博主通过在请求中设置`stream=True`并使用`Response`对象返回迭代内容,成功解决了问题。
摘要由CSDN通过智能技术生成

第三方RestAPI提供服务器日志文件,目前我们正在使用curl命令下载日志文件,比如curl -H "X-Auth-Token: XXXXXXXXXXXXXXXXXXXXXXXXXX" https://host_address/api/v3.0/admin/logs -o logs.zip

但我正在尝试使用Flask/Python创建简单的仪表板

下面是我的Python/Flask代码:

^{pr2}$

但是当我从浏览器中点击那个网址时,我得到了下面的错误信息Traceback (most recent call last):

...

...

...

File "/Users/admin/Documents/project/__init__.py", line 940, in download_console_logs

res.content,

File "/Users/admin/Documents/project/venv3/lib/python3.6/site-packages/requests/models.py", line 823, in content

self._content = bytes().join(self.iter_content(CONTENT_CHUNK_SIZE)) or bytes()

File "/Users/admin/Documents/project/venv3/lib/python3.6/site-packages/requests/models.py", line 745, in generate

for chunk in self.raw.stream(chunk_size, decode_content=True):

File "/Users/admin/Documents/project/venv3/lib/python3.6/site-packages/urllib3/response.py", line 436, in stream

data = self.read(amt=amt, decode_content=decode_content)

File "/Users/admin/Documents/project/venv3/lib/python3.6/site-packages/urllib3/response.py", line 384, in read

data = self._fp.read(amt)

File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/http/client.py", line 449, in read

n = self.readinto(b)

File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/http/client.py", line 497, in readinto

self._close_conn()

File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/http/client.py", line 403, in _close_conn

fp.close()

AttributeError: 'NoneType' object has no attribute 'close'

我使用PyCharm设置了断点/调试器,并且能够看到res.content中包含二进制数据,但我无法确定这里出了什么问题。在

这是一个简单的图表,它解释了我要做什么,

FICHi.png

更新:回答:我采用了以下方法,它以非常有效的方式解决了我的问题。在@app.route('/download/server/logs')

def download_log():

import requests

from flask import Reponse

res = requests.get('http:///v1.2/admin/logs', stream=True)

return Response(

res.iter_content(chunk_size=1024),

direct_passthrough=True

)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值