我正在尝试向使用AWS包Chalice的python API发出curl请求。
当我尝试访问app.current_request.json_body
时,抛出了一个JSON解析错误。不知道为什么会这样。我的JSON格式是正确的,据我所知。
下面是curl请求:
(echo -n '{"data": "test"}') |
curl -H "Content-Type: application/json" -d @- $URL
下面是python Chalice代码:
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"}
注意:当我从app.current_request
中删除.json_body
时。我不再犯错误了。
有什么想法吗
2条答案
按热度按时间utugiqy61#
documentation确实表明问题是Content-Type:
视图函数的默认行为支持application/json的请求体。当使用application/json的
Content-Type
发出请求时,app.current_request.json_body
属性会自动设置。此值是解析的JSON主体。您还可以配置视图功能以支持其他内容类型。您可以通过为应用指定content_types参数值来完成此操作。路由功能此参数是可接受的内容类型的列表。
它表明改变Content-Type可能会使json_body工作,但我没有成功。
但是使用
app.current_request.raw_body.decode()
而不是app.current_request.json_body
解决了这个问题。mzmfm0qo2#
我在使用Chalice测试客户端编写功能测试时遇到了同样的问题。我必须在装饰器和我用客户端构建的请求中设置内容类型。
我的路由配置如下:
测试:
希望这对某人有用!