我有两个服务器,其中一个尝试从另一个获取文件。我正在使用Flask get请求来回发送简单数据(字符串,列表,JSON对象等)。
我也知道如何只发送一个文件,但我需要发送一个包含我的数据的错误代码。
我使用了以下内容:
服务器1:
req = requests.post('https://www.otherserver.com/_download_file', data = {'filename':filename})
服务器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
服务器1:
with codecs.open('new_file.xyz', 'w') as f:
f.write(req.content)
......所有这些都很好。但是,我想发送一个错误代码变量和file_data
,以便服务器1知道状态(而不是HTTP状态,但是内部状态代码)。
感谢任何帮助。
答案 0 :(得分:4)
我想到的一个解决方案是使用自定义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)
<强>客户端强>
import requests
r = requests.post(url)
status = r.headers['my-custom-header']
# do what you want with status
<强>更新强>
以下是基于您的实施的服务器的另一个版本
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)