AWS Lambda Chalice应用程序未接收请求有效负载



我有一个小的lambda函数,我用AWS Chalice在Python中创建。在本地测试时,所有工作如期进行,我的测试请求工作完美。但是,当运行chalice deploy然后测试对托管API的相同请求时,我得到以下错误:

Traceback (most recent call last):
File "/var/task/chalice/app.py", line 1913, in _get_view_function_response
File "/var/task/app.py", line 34, in questions
payload = parse_qs(body)['data'][0]
KeyError: 'data'

app.py如下所示

# other imports
from urllib import parse_qs
def encode_payload(payload):
'''encodes generic payload'''
return base64.b64encode(pickle.dumps(payload)).decode('utf-8')
def decode_payload(payload):
'''decodes generic payload'''
return pickle.loads(base64.b64decode(payload))
app = Chalice(app_name='markthis-api')
@app.route('/questions', methods=['GET'], content_types=['application/json'])
def questions():
style = app.current_request.query_params['style']
body = app.current_request.raw_body.decode()
payload = parse_qs(body)['data'][0]
img = decode_payload(payload)
stuff = find_questions(img, style)
return {'pickle': encode_payload(stuff)}

test.py

def api_request(img, style):
url = f'https://api-code-etc.execute-api.eu-west-2.amazonaws.com/api/questions?style={style}'
#url = f'http://localhost:8000/questions?style={style}'
headers = {'Content-Type': 'application/json'}
payload = {'data': encode_payload(img)}
return requests.get(url, data=payload, headers=headers)

我是AWS和Chalice的新手,不知道是什么导致了这个问题。API有另一个endint '/'返回{'hello': 'world'}

任何帮助都非常感谢

当Content-Type为"application-json"首选的方法是使用.json_body。而不是;

body = app.current_request.raw_body.decode()

这样做可能会解决问题:

body = app.current_request.json_body

最新更新