第三方RestAPI提供了服務器日志文件,此刻我們正在使用curl命令下載日志文件,例如curl -H "X-Auth-Token: XXXXXXXXXXXXXXXXXXXXXXXXXX" https://host_address/api/v3.0/admin/logs -o logs.zip但是我正在嘗試使用Flask / Python創建簡單的儀表板,這是我的路線的Python / Flask代碼:@app.route('/download/server/logs')def download_log(): import requests from flask import send_file res = requests.get('http://<rest_api_host>/v1.2/admin/logs', stream=True) return send_file( res.content, attachment_filename='console_log.zip', mimetype='application/zip' )但是,當我從瀏覽器中訪問該網址時,出現以下錯誤,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包含二進制數據,但是我無法弄清楚這里出了什么問題。這是簡單的圖表,解釋了我要做什么,
3 回答

慕村225694
TA貢獻1880條經驗 獲得超4個贊
我采用了以下方法,它以非常有效的方式解決了我的問題。
@app.route('/download/server/logs')
def download_log():
import requests
from flask import Reponse
res = requests.get('http://<rest_api_host>/v1.2/admin/logs', stream=True)
return Response(
res.iter_content(chunk_size=1024),
direct_passthrough=True
)
添加回答
舉報
0/150
提交
取消