Node调用SOAP接口报413 Request Entity Too Large问题求助
解决Node.js中node-soap发起大SOAP请求报413错误的问题
问题根源
你配置的app.use(bodyParser.json({ limit: '50mb' }))完全无效——这个中间件是用来处理你的Express服务器接收JSON请求时的大小限制,而你现在是作为客户端用node-soap发送SOAP请求到远程IIS服务器,两者没有关联。
从错误响应和请求头来看,目标IIS服务器拒绝了你的请求,但SoapUI能成功执行,说明服务器本身允许该大小的请求,问题出在node-soap的请求配置上。
解决方案
1. 配置node-soap的Axios请求参数
node-soap底层依赖Axios发送请求,默认情况下Axios可能对请求体大小有隐性限制,你需要在创建SOAP Client时显式配置maxBodyLength(请求体最大长度)和maxContentLength(响应体最大长度):
const soap = require('soap'); // SOAP服务的WSDL地址 const wsdlUrl = 'http://xxxxxx.com/xxxxxService/xxxxxxService.svc?wsdl'; // 配置Axios参数,解除请求体大小限制 const clientOptions = { axios: { maxBodyLength: Infinity, // 允许任意大小的请求体,也可设为具体值如50*1024*1024(50MB) maxContentLength: 50 * 1024 * 1024 // 确保能接收大响应 } }; // 创建SOAP Client并调用服务 soap.createClient(wsdlUrl, clientOptions, (err, client) => { if (err) throw err; // 你的请求参数 const requestArgs = { /* 填入你的SOAP请求参数 */ }; client.xxxxxx(requestArgs, (err, response) => { if (err) throw err; console.log('请求成功:', response); }); });
2. 验证请求体完整性
确保你的请求参数在转换为SOAP XML时没有被截断,可以在调用服务前打印生成的XML:
client.on('request', (xml) => { console.log('生成的SOAP XML:', xml); console.log('XML长度:', xml.length); // 确认长度和你预期的294732一致 });
如果XML长度和预期不符,说明参数转换过程中出现了问题,需要检查参数结构是否符合WSDL定义。
额外排查方向
如果上述配置仍无效,可检查以下内容:
- 确认SoapUI和node-soap发送的请求头完全一致(除了User-Agent),可以在SoapUI中导出请求头,对比node-soap的
_header内容,确保没有缺失或错误的头信息。 - 若你有权限访问目标IIS服务器,检查
web.config中的requestFiltering配置,确认maxAllowedContentLength值足够大:<system.webServer> <security> <requestFiltering> <requestLimits maxAllowedContentLength="52428800" /> <!-- 50MB --> </requestFiltering> </security> </system.webServer>
内容的提问来源于stack exchange,提问作者Cristian Rodrigo Zenteno
相关产品推荐
相关产品推荐

