XML文件如何通过POSTman发送SOAP请求 设置Body raw为XML格式

1次阅读

postman调用soap接口需设body为raw+xml格式、添加soapaction请求头、content-type匹配soap版本,并确保xml命名空间与wsdl严格一致,否则易报400/500/415错误或静默失败。

XML文件如何通过POSTman发送SOAP请求 设置Body raw为XML格式

Postman 里怎么填 SOAP 的 XML Body

必须选 raw,且右上角语言下拉菜单要手动设成 XML (application/xml),不是 Text 或自动检测。Postman 不会根据内容自动识别 SOAP,如果这里选错,服务端大概率返回 400 Bad Request 或直接拒收。

常见错误现象:XML 看起来完全正确,但服务器报 Missing SOAPAction headerInvalid Content-Type —— 其实是 Body 类型没设对,或者 Header 漏了关键项。

  • Body 内容从 <?xml version="1.0" encoding="utf-8"?> 开始,第一行不能空
  • 根节点必须是 <envelope></envelope>,命名空间不能少:xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
  • 别把 WSDL 里 <types></types> 那段直接抄进来当 Body,那是定义,不是调用

SOAPAction 请求头为什么总被忽略

绝大多数老派 SOAP 服务(尤其 .NET ASMX 或 Java Axis)强制校验 SOAPAction 请求头,值必须和 WSDL 中对应 <operation></operation>soapAction 属性一致,哪怕只是空字符串也要显式传。

不填或填错的典型表现:返回 500 internal Server Error,但日志里可能只写 “Invalid SOAPAction”,没有更多线索。

  • 在 Postman 的 Headers 标签页手动添加一行:SOAPAction"http://tempuri.org/YourMethodName"(引号必须保留,部分服务要求)
  • 如果 WSDL 里该操作的 soapAction="",Header 值就填空字符串 "",不是删掉这一行
  • 注意大小写和协议前缀(http:// 还是 https://),有些服务严格匹配

Content-Type 是 text/xml 还是 application/soap+xml

取决于服务端实现年代:text/xml 对应 SOAP 1.1,application/soap+xml 对应 SOAP 1.2。90% 的遗留系统用前者,硬切后者会直接 415 Unsupported Media Type。

查法很简单:打开 WSDL 地址,在 <binding></binding> 下找 <binding style="document"></binding>,再看紧挨着的 <operation soapaction="..."> 所属的 <code><porttype></porttype>,它的 transport 属性如果是 http://schemas.xmlsoap.org/soap/http,就是 1.1;如果是 http://www.w3.org/2003/05/soap/bindings/HTTP/,才是 1.2。

  • 保险起见,先试 text/xml; charset=utf-8,失败再换 application/soap+xml; charset=utf-8
  • Postman 的 Content-Type Header 必须和 Body 右上角选的语言一致,否则服务端解析器可能直接放弃
  • UTF-8 bom 会导致解析失败,XML 文件保存时选 “UTF-8 no BOM”

XML 中的命名空间和前缀怎么对得上

WSDL 定义的 targetNamespace 和你 Body 里调用的元素前缀必须能映射上,否则服务端找不到对应方法。这不是格式问题,是契约问题。

典型症状:返回 Server was unable to process request. ---> Object reference not set to an instance of an object.(.NET 常见),实际就是命名空间没匹配上。

  • <body></body> 内部的请求元素上,显式声明命名空间,例如:<getuser xmlns:tem="http://tempuri.org/"></getuser>
  • 不要依赖默认命名空间(xmlns="..."),SOAP 处理器对默认命名空间的支持不一致
  • 如果 WSDL 中 <element name="GetUser"></element>targetNamespace="http://example.com/api" 下,那你的调用就必须带 xmlns:ns="http://example.com/api" 并用 <getuser></getuser>

最麻烦的点往往不在 XML 结构,而在命名空间 URI 的细微差异——多一个斜杠、大小写不同、协议从 http 变 https,都可能让整个请求静默失败。

text=ZqhQzanResources