Задать вопрос

Как осуществляется аутентификация в soap headers, soap клиент(python + suds)?

Добрый день, коллеги.
Столкнулся с проблемой при написании soap клиента.
Есть готовый вариант на php:
<?php
1. $client = new SoapClient('https://xx.xx.xx.xx/service/?wsdl');
2. $headers = array();
3. $headers[] = new SoapHeader('http://localhost/auth','Login','admin');
4. $headers[] = new SoapHeader('http://localhost/auth','Password','admin');
5. $client->__setSoapHeaders($headers);
6. $table_hi = $client->getTableByTitle('SomeTable');
7. $row_data = array(
8. 		array(
9.                          array(
10.                                  'name' => 'number',
11.                                 'value' => '55555555'
12.                          ),
13.                          array(
14.                                 'name' => 'data',
15.                                  'value' => '20140306185014'
16.                           ),
17. )
18. );
19. $rowset=$client->insertRowset($table_hi, $row_data);
20. ?>

Пытаюсь переписать все это дело на python. (Ключевое слово здесь "пытаюсь".)
Натолкнулся на питоновскую библиотеку suds(если есть другие актуальные библиотеки, буду рад за наводку)
По аналогии с клиентом на php начал переписывать.
from suds.client import Client
from suds.xsd.doctor import ImportDoctor, Import

imp = Import('http://schemas.xmlsoap.org/soap/encoding/')
d = ImportDoctor(imp)
client = Client(url='https://xx.xx.xx.xx/service/?wsdl', doctor=d)
client.set_options(soapheaders=['http://localhost/auth','Login','admin'])
client.set_options(soapheaders=['http://localhost/auth','Password','admin'])
result = client.service.getTableByTitle('SomeTable')


В php клиенте в заголовок soap передается массив с данными аутентификации, не смог найти примера как это реализовать на suds, пробывал по-разному. Все время вылетает ошибка suds.WebFault: Server raised fault: 'Wrong parameters for authorization'
Я не силен в веб-сервисах, если есть ссылка на исчерпывающий источник, в студию, пожалуйста.
Подскажите куда копать?
  • Вопрос задан
  • 5632 просмотра
Подписаться 3 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
@gimntut
Возможно, так:
import suds.client

try:
    auth_url = "https://url.to.my.service/authenticator?wsdl"
    auth_client = suds.client.Client(auth_url)
    cookie = auth_client.service.authenticate(user,password)
except Exception as e:
    print str(e)
    print auth_client.last_received()
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы