Zeep Python SOAP Client传递空参数失败问题求助
解决Zeep调用SOAP接口时无法生成空元素节点的问题
你遇到的核心问题是Zeep生成的SOAP请求格式和Postman的不匹配——接口要求jobCardNumber和jobcards必须存在空的元素节点,但你之前用的两种方法都不符合要求:
xsd.SkipValue会让Zeep完全省略该节点,而接口明确需要这个节点存在;Nil会生成带xsi:nil="true"属性的节点,这和Postman里<jobCardNumber></jobCardNumber>这种纯空元素的格式不一致。
下面是能精准复现Postman请求的正确写法:
正确实现代码
from zeep import Client # 初始化Zeep客户端(替换成你的实际WSDL地址) client = Client("http://your-soap-server-url?wsdl") # 获取ArrayOfJobCardsEnt类型,用于构造空的数组实例 array_of_job_cards_type = client.get_type("ns0:ArrayOfJobCardsEnt") # 构造符合接口要求的请求参数 request_data = { "key": "some_valid_key", "technicianID": "some_technician_id", "jobCardNumber": "", # 空字符串对应Postman里的<jobCardNumber></jobCardNumber> "jobcards": array_of_job_cards_type(), # 空数组实例生成<jobcards></jobcards> "message": "" } # 调用接口并处理响应 try: response_body = client.service.GetJobCards(**request_data) print("请求成功:", response_body) except Exception as e: print("请求失败:", str(e))
调试验证技巧
如果还是出现问题,可以开启Zeep的调试日志,对比生成的SOAP请求和Postman的差异:
import logging logging.basicConfig(level=logging.DEBUG)
日志会输出Zeep发送的完整XML内容,你可以直接和Postman的请求做对比,确认节点格式是否完全一致。
内容的提问来源于stack exchange,提问作者Emad
相关产品推荐
相关产品推荐

