elP*_*tor 1 python flask python-requests
我有两台服务器,其中一台试图从另一台获取文件。我正在使用Flask get请求来回发送简单数据(字符串,列表,JSON对象等)。
我也知道如何仅发送文件,但是我需要随数据发送错误代码。
我正在使用以下内容:
服务器1:
req = requests.post('https://www.otherserver.com/_download_file', data = {'filename':filename})
Run Code Online (Sandbox Code Playgroud)
服务器2:
@app.route('/_download_file', methods = ['POST'])
def download_file():
filename = requests.form.get('filename')
file_data = codecs.open(filename, 'rb').read()
return file_data
Run Code Online (Sandbox Code Playgroud)
服务器1:
with codecs.open('new_file.xyz', 'w') as f:
f.write(req.content)
Run Code Online (Sandbox Code Playgroud)
...一切都很好。但是,我想发送一个错误代码变量,file_data以便服务器1知道状态(而不是HTTP状态,而是内部状态代码)。
任何帮助表示赞赏。
我想到的一种解决方案是使用自定义HTTP标头。
这是服务器和客户端实现的示例。
当然,您可以根据需要随意更改自定义标头的名称和值。
服务器
from flask import Flask, send_from_directory
app = Flask(__name__)
@app.route('/', methods=['POST'])
def index():
response = send_from_directory(directory='your-directory', filename='your-file-name')
response.headers['my-custom-header'] = 'my-custom-status-0'
return response
if __name__ == '__main__':
app.run(debug=True)
Run Code Online (Sandbox Code Playgroud)
客户
import requests
r = requests.post(url)
status = r.headers['my-custom-header']
# do what you want with status
Run Code Online (Sandbox Code Playgroud)
更新
这是根据您的实现的服务器的另一个版本
import codecs
from flask import Flask, request, make_response
app = Flask(__name__)
@app.route('/', methods=['POST'])
def index():
filename = request.form.get('filename')
file_data = codecs.open(filename, 'rb').read()
response = make_response()
response.headers['my-custom-header'] = 'my-custom-status-0'
response.data = file_data
return response
if __name__ == '__main__':
app.run(debug=True)
Run Code Online (Sandbox Code Playgroud)