flask请求args解析器错误浏览器(或代理)发送了此服务器无法理解的请求

时间:2017-11-14 11:35:08

标签: python flask flask-restful

使用test_client并发送如下请求:

app = Flask(__name__)
client = app.test_client()

headers = {'content-type': 'application/json', 'Authorization': u'Bearer fake_token_123'}
params = {'dont_care': True}
client.get(ֿֿ'/my_route/123', query_string=params, headers=headers)

我的路线是

class MyController(Resource):

    def get(self, id):
        parser = reqparse.RequestParser()
        parser.add_argument('currency', type=str, default='USD', help="help text")

        args = parser.parse_args()
        currency_from_params = args.currency

parser.parse_args()

失败
The browser (or proxy) sent a request that this server could not understand

从标题中删除'content-type': 'application/json'时,它可以正常工作

我不明白这种行为,如何在没有优雅try, expect的情况下保护它。

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

您已经发现了如何修复它:如果您没有发布JSON,请不要发送content-type: application/json。您无法使用GET发送JSON,即使您可以(或正在使用POST),您也必须首先使用json.dumps(data)对JSON进行编码。