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

如何在AWS Lambda测试事件页测试XML请求并解决解析报错

解决Lambda API Proxy测试事件中发送XML请求体的解析错误

你的报错根源是Lambda函数代码尝试将event.body解析为JSON,但event.body实际是XML内容(转义后的<被JSON解析器判定为非法字符),导致解析失败。以下是具体解决方法:

一、正确构造测试事件

在API Proxy测试事件中,XML内容需以字符串形式放在body字段中,同时建议添加Content-Type头明确请求类型,示例如下:

{
  "body": "<AgentSearchRequest><agentNumber></agentNumber><locNumber>023000</locNumber><applicationName>ISY</applicationName><companyNumber>0</companyNumber><subCompanyNumber>0</subCompanyNumber><futureUse></futureUse></AgentSearchRequest>",
  "resource": "/{proxy+}",
  "path": "/api/AgentSearchCore",
  "httpMethod": "POST",
  "headers": {
    "Content-Type": "application/xml"
  }
}

注意:若XML内容包含双引号,需在JSON字符串中转义为\",你的示例XML无此情况,直接写入即可。

二、调整Lambda函数代码

不要将event.body当作JSON解析,改用XML解析库处理请求体,以下是两种主流语言的实现示例:

Python示例

import xml.etree.ElementTree as ET
import json

def lambda_handler(event, context):
    # 直接获取XML格式的请求体
    xml_content = event["body"]
    
    try:
        # 解析XML内容
        root = ET.fromstring(xml_content)
        # 提取所需字段(以locNumber为例)
        loc_number = root.find("locNumber").text
        
        return {
            "statusCode": 200,
            "headers": {
                "Content-Type": "application/json",
                "Access-Control-Allow-Origin": "*"
            },
            "body": json.dumps({"locNumber": loc_number})
        }
    except Exception as e:
        return {
            "statusCode": 400,
            "headers": {
                "Content-Type": "application/json",
                "Access-Control-Allow-Origin": "*"
            },
            "body": json.dumps({"error": f"XML解析失败: {str(e)}"})
        }

Node.js示例

const xml2js = require("xml2js");

exports.handler = async (event) => {
    const xmlContent = event.body;
    
    try {
        // 解析XML内容
        const parsedXml = await xml2js.parseStringPromise(xmlContent);
        // 提取所需字段(以locNumber为例)
        const locNumber = parsedXml.AgentSearchRequest.locNumber[0];
        
        return {
            statusCode: 200,
            headers: {
                "Content-Type": "application/json",
                "Access-Control-Allow-Origin": "*"
            },
            body: JSON.stringify({ locNumber })
        };
    } catch (err) {
        return {
            statusCode: 400,
            headers: {
                "Content-Type": "application/json",
                "Access-Control-Allow-Origin": "*"
            },
            body: JSON.stringify({ error: `XML解析失败: ${err.message}` })
        };
    }
};

额外注意事项

  • 确保API Gateway的集成请求配置中,没有强制将请求体转换为JSON(默认代理集成不会修改请求体)。
  • 如果使用第三方XML解析库,需将库打包进Lambda部署包(Node.js可通过npm安装后打包,Python可通过pip安装到本地目录后打包)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 16:25:21