【问题标题】:Calling REST API of a Flask app from another Flask app从另一个 Flask 应用程序调用 Flask 应用程序的 REST API
【发布时间】:2020-01-01 01:46:07
【问题描述】:

我正在本地计算机上运行两个 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)

在烧瓶应用 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)

我使用邮递员对 /hi_world 进行 POST 调用,并在请求正文 {"a":"Hello","b":"World"} 中传递以下字典。但是,我得到了<Response [404]>。当我直接从邮递员那里调用/hello_world 时,它与<Response [200]> 一起工作得很好。我做错了什么?

【问题讨论】:

  • 我认为这是一个错字:你要去0.0.0.0/5000而不是0.0.0.0:5000
  • 感谢您的收获。实际上,在我的源代码中,它就像您编写的那样。我只是在这里打错了。
  • 如果你得到一个 404 到 hi_world,那么,你能确保路由独立工作吗?即删除任何涉及与另一个端点交谈的内容
  • 0.0.0.0 不是可路由的 IP。这是一个绑定地址。在同一台机器上使用127.0.0.1:5000
  • 0.0.0.0 将匹配默认路由,这可能会路由到本地主机。不是惊人的做法,但不一定是一个问题。

标签: python python-3.x rest flask


【解决方案1】:

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

response = requests.post(url="http://0.0.0.0:5000/",data=paras)

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

response = requests.post(url="http://0.0.0.0:5000/hello_world",data=paras)

【讨论】:

  • 哎呀,我怎么错过了
猜你喜欢
  • 1970-01-01
  • 2019-01-30
  • 1970-01-01
  • 1970-01-01
  • 2013-06-22
相关资源
最近更新 更多