Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:从RestAPI下载zip文件_Python_Flask_Python Requests - Fatal编程技术网

Python:从RestAPI下载zip文件

Python:从RestAPI下载zip文件,python,flask,python-requests,Python,Flask,Python Requests,第三方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_l

第三方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'
    )
我使用PyCharm设置断点/调试器,可以看到
res.content
中包含二进制数据,但我无法找出这里的错误

这是一张简单的图表,解释了我要做的事情,

更新:回答:我采用了以下方法,它以非常有效的方式解决了我的问题

@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
    )
@app.route(“/download/server/logs”)
def下载日志():
导入请求
从进口回复
res=requests.get('http:///v1.2/admin/logs,stream=True)
返回响应(
res.iter\u内容(块大小=1024),
直接传递=真
)

我不确定您是否给出了正确的错误消息。但是我认为,如果您将字符串传递给
send\u file()
方法,那么它将不起作用。您需要传递二进制数据

如果将
res.content
包装到
io.BytesIO()
中,并将其传递给
send\u file()
方法,我相信它应该可以工作

例:

@app.route(“/download/server/logs”)
def下载日志():
导入请求
从flask导入发送\u文件
输入io
res=requests.get('http:///v1.2/admin/logs,stream=True)
返回发送文件(
io.BytesIO(内容物),
附件\u filename='console\u log.zip',
mimetype='application/zip'
)

希望能有帮助

如果要下载文件,请尝试烧瓶的响应方法:

import requests
from flask import Response
@app.route('/download/server/logs')
def download_log():
res = requests.get('http://<rest_api_host>/v1.2/admin/logs')
return Response(res.content,headers = dict(res.headers))
导入请求
从烧瓶导入响应
@app.route(“/download/server/logs”)
def下载日志():
res=requests.get('http:///v1.2/admin/logs')
返回响应(res.content,headers=dict(res.headers))

从本地文件夹下载

def download_Object():
    try:
        srcFileName="bulk_file.zip"
        with open(srcFileName, 'wb') as f:
            f.write(srcFileName)
    except Exception as e:
        print(e)

你有多余的逗号吗<代码>从flask导入,发送_文件@AdriVelaz谢谢,这是在这里发布时的打字错误嗨,你的问题发生了什么?进展如何?@NimeshkaSrimal谢谢你的帮助,我用另一种方式解决了它。@n33rma添加此项后,你收到了什么错误消息?你能告诉我你是如何运行这个应用程序的吗?
import requests
from flask import Response
@app.route('/download/server/logs')
def download_log():
res = requests.get('http://<rest_api_host>/v1.2/admin/logs')
return Response(res.content,headers = dict(res.headers))
def download_Object():
    try:
        srcFileName="bulk_file.zip"
        with open(srcFileName, 'wb') as f:
            f.write(srcFileName)
    except Exception as e:
        print(e)
try:
    srcFileName="filename"
    with open(srcFileName, 'wb') as f:
        f.write(srcFileName)
except Exception as e:
    print(e)