只能通过 GET 访问 Flask 应用程序,但不能通过 POST 访问 Flask 应用程序

问题描述 投票:0回答:1

我使用 Python Flask(导入)作为 API 来通过 Keycloak 接收 json 文件进行验证。同时还有一个 Vue 应用程序和第二个 python Flask 应用程序(后端),运行完美。

一切都通过 NGINX 设置,当我尝试对 IMPORT 服务执行 GET 请求时,我收到 200 响应,因此 URL 是可访问的。但是,尽管我从 Keycloak 成功获取了访问令牌,但通过 POST 请求,我收到了 405 错误。哪里有问题? 我不确定 Flask 应用程序还是 NGINX 是这里代码的问题:

#Python app
require_auth = ResourceProtector()
validator = ClientCredsTokenValidator("https://myEndpoint/energy/data")
require_auth.register_token_validator(validator)

@app.route('/energy/data', methods=['GET'])
@require_auth("energy_data")
def energy_data_api():
    data =request.json
    print(request.headers)
    
    #res = add_new_data(data, 'add-energy-data') ####DB Entry

    response = "JSON ARRIVED"
    print(response)

    return jsonify(message=response), 200


#NGINX.conf
server {
    listen 80;
    server_name my.domain;
    return 301 https://$host$request_uri;
}

upstream backend {
   server my.domainIP:5000;
}

upstream import {
   server my.domainIP:5001;
}

server {
    listen 443 ssl;
    server_name my.domain;
    ssl_certificate /etc/nginx/certs/fullchain.pem;
    ssl_certificate_key /etc/nginx/certs/privkey.pem;

    location / {
        try_files $uri $uri/ /index.html;
        root /usr/share/nginx/html;
        index index.html;
    }
    location /getUser {
        include uwsgi_params;
        uwsgi_pass backend;
    }
    location /action {
        include uwsgi_params;
        uwsgi_pass backend;
    }
    location /energy/data {
        include uwsgi_params;
        uwsgi_pass import;
    }
    location /masterData/update {
        include uwsgi_params;
        uwsgi_pass import;
    }
}

python flask nginx post keycloak
1个回答
0
投票

只接受 GET 请求是非常合乎逻辑的,因为你从字面上告诉它“此请求仅是 GET”。你在这一行中执行此操作:

@app.route('/energy/data', methods=['GET'])

如果你希望它也能够发出 POST 请求,你应该修改它,如下所示:

@app.route('/energy/data', methods=['GET', 'POST'])

希望这对您有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.