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

如何在Python的SOAP请求中添加SOAPAction参数

解决方法

正确添加SOAPAction的方式

SOAPAction属于标准HTTP请求头字段,添加不生效大概率是两个原因:一是头字段名拼写/格式错误,二是部分SOAP服务端要求SOAPAction的值必须用双引号包裹,否则会校验不通过。
另外当前代码还存在一个服务地址不匹配的隐藏问题:你请求的URL是EmployeeService.asmx,但调用的方法属于CompanyService,如果不是笔误的话也会导致请求失败。

修改后的完整代码

import requests
# 注意:如果调用的是CompanyService的方法,建议把URL路径改成对应服务
# url = "https://api.nmbrs.nl/soap/v3/CompanyService.asmx"
url = "https://api.nmbrs.nl/soap/v3/EmployeeService.asmx"
# 1. 直接把SOAPAction加到headers字典里,值用双引号包裹
headers = {
    'content-type': 'text/xml; charset=utf-8',
    'SOAPAction': '"https://api.nmbrs.nl/soap/v3/CompanyService/List_GetAll"'
} 

body = """<?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:com="https://api.nmbrs.nl/soap/v3/CompanyService">
   <soapenv:Header>
      <com:AuthHeaderWithDomain>
         <!--Optional:-->
         <com:Username>{}</com:Username>
         <!--Optional:-->
         <com:Token>{}</com:Token>
         <!--Optional:-->
         <com:Domain>{}</com:Domain>
      </com:AuthHeaderWithDomain>
   </soapenv:Header>
   <soapenv:Body>
      <com:List_GetAll/>
   </soapenv:Body>
</soapenv:Envelope>""".format(username, token, domain)
response = requests.post(url, data=body, headers=headers)
# 调试用:可以打印请求头和返回内容确认问题
# print(response.request.headers)
# print(response.status_code, response.text)

校验排查方法

  • 执行后打印response.request.headers确认SOAPAction头已经被正确携带
  • 如果还是报错,打印response.text查看服务端返回的具体错误提示,确认是SOAPAction校验问题、权限问题还是服务地址/方法不匹配问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 15:45:00