SUDS Пользовательский заголовок
Я новичок в Python и использую suds для клиента wsdl. Как я могу создать собственный заголовок запроса для этого.
XML получить из SOAP UI:
<soapenv:Header>
<sbus:SBusContext message-tracking-id="?" correlation-id="?" entry-dtime="?" timestamp="?" entry-system="?" entry-system-principal="?" entry-url="?" priority="?">
<!--Optional:-->
<sbus:Keys>
<!--1 or more repetitions:-->
<sbus:Key keyType="?" keyValDataType="string">
<sbus:KeyValue>?</sbus:KeyValue>
</sbus:Key>
</sbus:Keys>
<!--Optional:-->
<sbus:ExtContext>?</sbus:ExtContext>
</sbus:SBusContext>
</soapenv:Header>
4 ответа
РЕДАКТИРОВАТЬ -
Я понял, что вы, вероятно, спрашиваете о заголовке SOAP, а не заголовке http. Если так, игнорируйте мой ответ. Виноват.
Посмотрите здесь: Как добавить заголовки http в suds 0.3.6?
Вы можете добавить заголовок при создании клиента следующим образом:
client = suds.client.Client(url, headers={'key': 'value'})
Или после создания клиента, используя set_options, как это:
client.set_options(headers={'key2': 'value'})
Стоит отметить, что оригинальный пакет suds больше не поддерживается (последний выпуск, сентябрь 2010 г.). В нем отсутствуют различные функции, которые вам могут понадобиться, например сжатие gzip (поэтому не беспокойтесь о добавлении заголовка 'accept-encoding:gzip', если вы используете старый пакет suds). Различные вилки возникли. Я считаю, что наиболее активным из них является суд-юрко.
Этот фрагмент из официальной документации SUDS:
from suds.sax.element import Element
client = client(url)
ssnns = ('ssn', 'http://namespaces/sessionid')
ssn = Element('SessionID', ns=ssnns).setText('123')
client.set_options(soapheaders=ssn)
result = client.service.addPerson(person)
Мне нужно было добавить 2 заголовка мыла с xmlns. Я нашел решение после ответа @piotr sz. вот решение, которое мне было нужно:
userName = Element('UserName').setText(fco.user)
password = Element('Password').setText(fco.pwd)
fdxns = Attribute('xmlns', "http://fdx.co.il/Authentication")
for field in userName, password:
field.append(fdxns)
client.set_options(soapheaders=(userName, password))
В suds есть встроенная функция безопасности для установки заголовка безопасности.
from suds.wsse import Security, UsernameToken
url = 'http://something.some/service.svc?wsdl'
client= Client(url, faults=False)
security = Security()
token = UsernameToken('username', 'password')
token.setcreated()
security.tokens.append(token)
client.set_options(wsse=security)