PHP SOAP调用转换为Postman请求返回Bad Request错误如何解决
Postman SOAP请求Bad Request错误修复方案
核心错误原因
- XML嵌套格式错误:XML文档中不允许直接嵌套另一个带
<?xml声明的XML内容,PHP代码中内层XML是作为字符串传入,需要用CDATA包裹避免解析冲突 - 内层XML结构和PHP生成的不一致:PHP生成的内层根节点是
<xsd:schema>,没有额外的<PARAMS>父节点,你编写的请求体多了<PARAMS>标签,且根节点命名空间前缀缺失 - SOAPAction配置要和服务端要求完全匹配,SOAP1.1规范要求SOAPAction头必须用双引号包裹值
必做配置调整
- 请求头确认:设置两个必填头参数
Content-Type: text/xml; charset=utf-8SOAPAction: "你的实际服务地址/ProcessRequestJSON",注意SOAPAction的值两端必须带双引号
- 如果你调用的是自签SSL证书的接口,需要在Postman设置中关闭SSL校验:
Settings -> General -> 关闭SSL certificate verification - 请求体格式选择
Raw,类型选择XML
修复后请求体示例
<?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <ProcessRequestJSON xmlns="替换为你的实际服务命名空间地址"> <P_RequestParams> <RequestID>48</RequestID> <InputData> <![CDATA[ <?xml version="1.0" encoding="utf-8"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <ZHT>替换为实际ZHT值</ZHT> <PASSWORD>替换为实际密码</PASSWORD> <SNL>替换为实际日期值</SNL> <USERNAME></USERNAME> <RETHASIMA>1</RETHASIMA> <LANG></LANG> <ROLE>替换为实际角色值</ROLE> </xsd:schema> ]]> </InputData> </P_RequestParams> <Authenticator> <UserName>替换为实际认证用户名</UserName> <Password>替换为实际认证密码</Password> </Authenticator> </ProcessRequestJSON> </soap:Body> </soap:Envelope>
内容的提问来源于stack exchange,提问作者Nimrod Yanai
相关产品推荐
相关产品推荐

