Как добавить заголовок при создании запроса мыла с помощью soappy
У меня есть файл WSDL, с помощью которого я хотел сделать запрос на мыло, который будет выглядеть именно так -
<?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:Header>
<AuthSoapHd xmlns="http://foobar.org/">
<strUserName>string</strUserName>
<strPassword>string</strPassword>
</AuthSoapHd>
</soap:Header>
<soap:Body>
<SearchQuotes xmlns="http://foobar.org/">
<searchtxt>string</searchtxt>
</SearchQuotes>
</soap:Body>
</soap:Envelope>
Чтобы справиться с этим, я сделал это
>> from SOAPpy import WSDL
>> WSDLFILE = '/path/foo.wsdl'
>> server = WSDL.Proxy(WSDLFILE)
>> server.SearchQuotes('rel')
Я получаю эту ошибку
faultType: <Fault soap:Server: System.Web.Services.Protocols.SoapException: Server was unable to process request. ---> System.NullReferenceException: Object reference not set to an instance of an object.
Я отладил его и получил это
*** Outgoing SOAP ******************************************************
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/1999/XMLSchema"
>
<SOAP-ENV:Body>
<SearchQuotes SOAP-ENC:root="1">
<v1 xsi:type="xsd:string">rel</v1>
</SearchQuotes>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Мы видим, что он не содержит заголовка. Я думаю, что файл WSDL имеет некоторую ошибку. Теперь может кто-нибудь предложить мне, как добавить заголовок к этому исходящему запросу на мыло.
Любая помощь будет оценена. заранее спасибо
1 ответ
Не проверено, но я полагаю, что вы можете использовать метод, предложенный в документах, для добавления заголовков мыла, т. Е. Сделать и подготовить SOAPpy.Header
экземпляр, затем используйте server = server._hd (hd)
чтобы снабдить его прокси-сервером (хотя в вашем случае, как вы говорите, это обходная попытка сломать WSDL - может быть, лучше вместо этого исправить WSDL?).