You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Lambda内置HTTPS端点无法传递POST数据问题求助

Lambda函数URL调用时event为空的解决方法

1. 适配Lambda URL的event结构

Lambda函数URL的请求格式和API Gateway(v1)完全不同:

  • API Gateway测试时传入的是APIGatewayProxyRequest格式,body直接是解析后的JSON对象
  • Lambda URL传入的是APIGatewayV2ProxyRequest格式,body默认是base64编码的字符串,需要解码后才能读取

以Python函数为例,修改代码适配Lambda URL:

import base64
import json

def lambda_handler(event, context):
    if not event.get('body'):
        return {'statusCode': 400, 'body': json.dumps({'error': '无请求体'})}
    
    # 处理base64编码的请求体
    if event['isBase64Encoded']:
        decoded_body = base64.b64decode(event['body']).decode('utf-8')
        request_data = json.loads(decoded_body)
    else:
        request_data = json.loads(event['body'])
    
    email = request_data.get('email')
    return {'statusCode': 200, 'body': json.dumps({'已接收邮箱': email})}

2. 检查函数URL的代理集成配置

如果你的函数期望直接接收原始JSON请求体而非代理格式,可以在Lambda控制台的函数URL配置中,关闭Use Lambda proxy integration选项。关闭后,event会直接包含原始请求数据(不同运行时处理逻辑略有差异,比如Node.js中可直接解析为JSON)。

3. 验证curl请求的正确性

调整curl命令的Content-Type头为标准大写格式,并添加-v参数查看请求详情,确认请求体和头是否正确发送:

curl -v --location 'https://.........lambda-url.us-east-1.on.aws' \
--header 'Content-Type: application/json' \
--data '{
  "email": "value1"
}'

4. 查看CloudWatch执行日志

在Lambda控制台的「监控」标签下打开CloudWatch日志,查看函数执行时实际传入的event结构。通过日志可以明确event是空值还是结构不符合预期,这是最直接的排查方式。

内容的提问来源于stack exchange,提问作者Peter Penzov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 15:01:18