【问题标题】:Heroku - Python simple POST api, only can do GET (cannot do POST)Heroku - Python 简单的 POST api,只能做 GET(不能做 POST)
【发布时间】:2015-11-09 11:26:38
【问题描述】:

我想做一个只包含 POST 的 Web API。目前我需要在 web 上运行 python 脚本,所以我正在 Heroku 中从 flask 构建一个 python web 服务器。但是,我的问题是,每当我从 POSTMAN 发送 POST 请求时,我会收到实际上来自 GET 请求的返回数据。以下是我的代码:

from flask import Flask
from flask import request
import os

app = Flask(__name__)

@app.route("/", methods=['GET', 'POST'])
def api_grab_key():
    if request.method == 'POST':
        if request.headers['Content-Type'] == 'application/json':
            return request.json["imgUrl"]
        else:
            return "Request must be in JSON"
    if request.method == 'GET':
        return "Hello World! GET request"

if __name__ == "__main__":
    port = int(os.environ.get('PORT', 33507))
    app.run(host='0.0.0.0', port=port)

当我在本地运行时它可以工作,但不能在 Heroku 上运行。在 Heroku 上,输出始终是“Hello World!GET request”谢谢!

【问题讨论】:

  • curl -XPOST -HContent-Type:application/json -d'{"imgUrl":"test"}' localhost:33507 显示什么? curl -XPOST -HContent-Type:application/json -d'{"imgUrl":"test"}' HEROKU_APP_ROUTE呢?
  • 在 curl 之后仍然显示“GET request”,显然我的问题在于我将请求发送到的 URL。

标签: python heroku flask


【解决方案1】:

抱歉,显然我的问题出在 URL 上。所以在 Heroku 中,它有 xxx.heroku.com 和 xxx.herokuapp.com。 我不知道为什么,发送到 xxx.heroku.com 的请求变成了 GET 请求。因此,我不得不将其更改为 xxx.herokuapp.com 以进行 POST 请求。

【讨论】:

    【解决方案2】:

    我没有看到任何跳出,您是否尝试过在 Flask 中启用调试模式?

    app.run(debug=True)
    

    然后:

    heroku logs --tail
    

    【讨论】:

    • 这是关于如何调试的建议,而不是问题的答案。在提供答案之前,可能应该要求 OP 在 cmets 中提供更多调试输出。
    猜你喜欢
    • 2016-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-27
    相关资源
    最近更新 更多