为什么在用烧瓶连接两个应用程序时出现404错误

时间:2019-03-13 15:12:43

标签: python post flask python-requests

我正在尝试通过烧瓶连接两个应用程序:

  @app.route("/agent/", methods = ['POST', 'GET'])
  def agent():
  data = request.get_json(force = True)
  if(data):
           if(format(data['option']) == "1"):
              print(data['prepository']['run'])
              requests.post('http://some ip:4001/prepopsitory/', data['prepository'])
            return "hi" 
app.run(host = 'some ip', port = 4998)

还有这个

app = Flask(__name__)
@app.route('/prepository/', methods = ["GET","POST"])
def recibe():
     data = request.get_json(force = True)
     if(data):
          run = data['prepository']['run']
          prepository.formatea(run,1)
          return "hi"  
app.run(host = 'some ip', port = 4001)  

问题是,当我将邮递员发送到Agent应用时,它不起作用,它在第二个应用(存储库)上显示404

当我逐行运行

   @app.route('/prepository/', methods = ["GET","POST"])

  

SyntaxError:解析时出现意外的EOF

我不知道这两个问题是否相关。

编辑

现在,我尝试了任何突然出现的事情,我发现如果将帖子直接发送到存储库中,它将起作用。 假设我假设这是两个应用程序之间的连接问题。 另外,我还更改了用于获取和发布的库,它是flask.request.get_json 现在是requests.postrequests.get 仍然不起作用。

1 个答案:

答案 0 :(得分:1)

我不确定这应该如何工作,好像您的prepositoryagent路由都已配置为处理GETPOST请求,但是您的路线不能区分传入的GET和POST请求。默认情况下,如果您未在路线上指定支持的方法,则flask将默认为支持GET请求。但是,由于不支持传入GETPOST,因此如果不检查传入请求,您的路由将不知道如何处理传入请求。像下面这样的简单条件:if flask.request.method == 'POST':可用于区分两种类型的请求。也许您可以添加上述条件检查,以检查每种类型的请求,以便您的应用程序服务可以适当地响应。类似于:

  @app.route('/agent', methods=['POST', 'GET'])
  def agent():
      if request.method == "GET":
          msg = "GET Request from agent route"
          return jsonify({"msg":msg})
      else: 
        # Handle POST Request
        data = request.get_json()
        if data:
            # handle data as appropriate

        msg = "POST Request from agent route handled"
        return jsonify({"msg": msg})

app.run(host = 'some ip', port = 4998)

出于调试目的,仅发送回一个非常简单的json响应即可验证配置的正确性,因为很难判断您的数据对象是否按原样正确设置。然后,当两个服务都可以正常工作时,就可以开始构建应用程序服务以彼此通信。

希望有帮助!