从另一个 Flask 应用程序调用 Flask 应用程序的 REST API

kry*_*ic1 5 python rest flask python-3.x

我在本地计算机上运行两个 Flask 应用程序(A 和 B)。在 Flask 应用程序 B 中,我从 Flask 应用程序 A 调用端点。

从 Flask 应用程序 A 调用的端点是:/hello_world

from flask import Flask, jsonify, request

app = Flask(__name__)

@app.route("/hello_world", methods=["POST"])
def hello_world():
     a = request.json.get("a")
     b = request.json.get("b")
     return jsonify({a:b})

if __name__ == '__main__':
    app.run(host='0.0.0.0',port=5000,debug=True)
Run Code Online (Sandbox Code Playgroud)

在 Flask 应用程序 B 中,端点/hi_world正在调用上述端点,如下所示:

import requests
from flask import Flask, jsonify, request

app = Flask(__name__)

@app.route("/hi_world", methods=["POST"])
def hi_world():
     a = request.json.get("a")
     b = request.json.get("b")
     paras = {"a":a, "b":b}
     response = requests.post(url="http://0.0.0.0:5000/",data=paras)
     print(response)
     return None

if __name__ == '__main__':
    app.run(host='0.0.0.0',port=5002,debug=True)
Run Code Online (Sandbox Code Playgroud)

/hi_world我使用邮递员对我在请求正文中传递以下字典的位置进行 POST 调用{"a":"Hello","b":"World"}。但是,我得到了一个<Response [404]>. 当我直接从邮递员那里打电话时,/hello_world它与<Response [200]>. 我究竟做错了什么?

d3c*_*tor 3

在您的第二个应用程序中,您需要更新此行:

response = requests.post(url="http://0.0.0.0:5000/",data=paras)
Run Code Online (Sandbox Code Playgroud)

引用第一个应用程序的完整 URL,例如:

response = requests.post(url="http://0.0.0.0:5000/hello_world",data=paras)
Run Code Online (Sandbox Code Playgroud)