我有两台服务器,其中一台试图从另一台获取文件。我正在使用 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 状态,而是内部状态代码)。
感谢任何帮助。
请您参考如下方法:
我想到的一个解决方案是使用自定义 HTTP header 。
这是一个示例服务器和客户端实现。
当然,您可以根据需要自由更改自定义 header 的名称和值。
服务器
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)
