两个Flask服务器通信时,如何接收请求返回的数据?
解决两个Flask服务器间的数据传输问题
首先先修正第一个服务器的代码问题,避免运行报错:
- 缩进错误:
if sOper == 1需要嵌套在if request.method == 'POST'的代码块内,否则GET请求时会因sOper未定义抛出异常 - 异常处理:当
sOper不等于1时,返回错误响应而非直接抛出异常,更符合Web服务规范
修正后的第一个服务器代码:
from flask import Flask, json, request import os.path app = Flask(__name__) @app.route('/', methods=['GET', 'POST']) def docu_test(): if request.method == 'POST': sOper = int(request.form['test']) if sOper == 1: with open('data/document.json', mode='r') as f: document: dict = json.load(f) return document # Flask会自动将字典转为JSON响应 else: return {"error": "Invalid operation"}, 400 # 处理GET请求的默认响应 return {"message": "Send a POST request with test=1 to get the document"}, 200 if __name__ == '__main__' and os.path.exists('data/document.json'): app.run(host="127.0.0.1", port=1240, debug=True) # 开启debug方便调试
然后修改第二个服务器的代码,替换pass位置的代码来接收并处理第一个服务器返回的数据:
- 使用
response.json()解析第一个服务器返回的JSON响应(Flask会自动把字典转为JSON格式响应) - 可直接返回数据给客户端,或做打印、保存文件等自定义处理
修改后的第二个服务器代码:
from flask import Flask, json import requests api = Flask(__name__) @api.route('/', methods=['GET']) def testing(): # 发送POST请求到第一个服务器 response = requests.post("http://127.0.0.1:1240", data={'test':1}) # 检查请求是否成功 if response.status_code == 200: # 解析返回的JSON数据为Python字典 document_data = response.json() # 自定义处理:比如打印数据 print("Received document data:", document_data) # 将数据返回给访问第二个服务器的客户端 return document_data else: # 请求失败时返回错误信息 return {"error": "Failed to get document data", "status": response.status_code}, response.status_code if __name__ == '__main__': api.run(host="127.0.0.1", port=2480, debug=True)
关键说明
- 第一个服务器返回字典时,Flask会自动设置响应头
Content-Type: application/json并完成字典到JSON字符串的序列化 - 第二个服务器通过
response.json()可直接将JSON响应转回Python字典,方便后续操作 - 启动顺序:必须先启动第一个服务器,再启动第二个服务器,否则会因连接失败报错
内容的提问来源于stack exchange,提问作者Giovanni di Giuseppe
相关产品推荐
相关产品推荐

