【问题标题】:Debugging Flask app - How can I find out what caused a 400 bad request error?调试 Flask 应用程序 - 如何找出导致 400 错误请求错误的原因?
【发布时间】:2014-02-19 04:44:05
【问题描述】:

我目前正在开发我的第一个 Heroku python flask web 应用程序,我正在使用 gunicorn 和 foreman 在本地对其进行测试。当我尝试使用 url 参数中编码的 json 发出 GET 请求时,我不断收到 400 个错误的请求响应。但是,我无法弄清楚出了什么问题。服务器日志不打印任何内容。没有记录错误,也没有任何关于已收到请求的消息。

我可以做些什么来获得有关问题所在的更多信息?我是否需要配置这些工具之一来更详细地记录错误?任何帮助将不胜感激。谢谢。

(顺便说一句app.debug = True

【问题讨论】:

    标签: heroku flask gunicorn foreman bad-request


    【解决方案1】:

    好吧,我不确定这是否是导致我的问题的原因,但我意识到我作为 URL 参数传递的 JSON 很长(在 URL 编码之前大约有 8000 个字符)。另一个 SO question 表明典型的限制是大约 2000 个字符。我现在已经通过使用 POST 请求解决了我的问题,但如果有人有任何提示,我仍然很想知道如何从 Web 应用程序中获取更详细的调试信息。

    【讨论】:

      【解决方案2】:

      您在使用蓝图吗?根据我的经验,蓝图可以防止任何输出出现在控制台中。这是我用来解决此问题的简单日志记录功能:

      import logging
      log = logging.getLogger(__name__)
      logging.basicConfig(format="[%(asctime)s]  %(levelname)s:%(message)s")
      log.setLevel(logging.DEBUG)
      
      def logging_fun(method, remote_addr):
          log.info('HTTP %s request from %s' % (method, remote_addr))
      
      @blueprint.route('/servers', methods=['GET'])
      def list_servers():
          """Gives a list of all registered servers."""
          logging_fun(request.method, request.remote_addr)
      

      如果您需要查看 URL 参数是否存在,也可以让它遍历并打印 request.args

      【讨论】:

      • 感谢您的建议。但是,我没有使用蓝图。还值得注意的是,绑定到我的网址的函数 list_servers 在您的示例中似乎从未在我的网络应用程序中被调用。
      猜你喜欢
      • 1970-01-01
      • 2015-11-27
      • 2021-04-09
      • 2013-09-03
      • 1970-01-01
      • 2015-04-28
      • 2021-12-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多