首页 > 解决方案 > 使用 Chalice 时无法访问请求 json_body

问题描述

我正在尝试向使用 AWS 包 Chalice 的 python api 发出 curl 请求。

当我尝试访问app.current_request.json_bodyJSON Parse 时抛出错误。无法弄清楚为什么会这样。据我所知,我的 JSON 格式正确。

这是卷曲请求:

(echo -n '{"data": "test"}') |
curl -H "Content-Type: application/json"  -d @-  $URL

这是python圣杯代码:

app = Chalice(app_name='predictor')

@app.route('/', methods=['POST'], content_types=['application/json'])
def index():
    try:
        body = app.current_request.json_body
    except Exception as e:
        return  {'error':  str(e)}

当我使用上述curl请求调用路由时,出现以下错误:

{"error": "BadRequestError: Error Parsing JSON"}

注意:当我.json_bodyapp.current_request. 我不再得到错误。

有什么想法吗?

标签: pythonjsonamazon-web-servicesparsingchalice

解决方案


文档确实表明问题出在 Content-Type 上:

视图函数的默认行为支持 application/json 的请求体。Content-Type当使用application/json发出请求时,app.current_request.json_body会自动为您设置该属性。此值是已解析的 JSON 正文。

您还可以配置视图功能以支持其他内容类型。您可以通过为您的 app.route 函数指定 content_types 参数值来做到这一点。此参数是可接受的内容类型的列表。

它表明更改 Content-Type 可能会使 json_body 工作,但我没有成功。

但是使用app.current_request.raw_body.decode()而不是app.current_request.json_body解决问题。


推荐阅读