Django 1.8 (на Python 3) — сделать SOAP-запрос с помощью pysimplesoap

С одной недели я пытаюсь получить некоторые данные из приложения Dolibarr, включая веб-сервисы Dolibarr.

В двух словах, я пытаюсь сделать запрос на мыло для получения информации о пользователе.

Сначала я пытался создать экземпляр SoapClient с параметрами ‘wsdl’ и ‘trace’, напрасно. Объект SoapClient никогда не создавался!

Во-вторых, я сделал классический объект SoapClient без ‘wsdl’, однако я использовал: ‘location’, ‘action’, ‘namespace’, ‘soap_ns’, ‘trace’; Это был успех (я думаю), но он не работал, когда я вызывал метод вызова Клиента. Мой dolibarrkey не соответствовал моему ключу в веб-сервисе, но их ключи одинаковы (копия & вставить).

Для более подробного объяснения взгляните на dolibarr api (для извлечения данных) с форматом данных xlm.

Ссылка на веб-сервис getUser (нажмите на getUser для отображения параметров):
http://barrdoli.yhapps.com/webservices/server_user.php

Ссылка на формат данных xml (для запроса SOAP может быть):
http://barrdoli.yhapps.com/webservices/server_user.php?wsdl

from pysimplesoap.client import SoapClient, SoapFault
import sys

def listThirdParties():
# create a simple consumer
try:
# client = SoapClient(
# "[MyAppDomain]/webservices/server_user.php")
# print(client)

# client = SoapClient(wsdl="[MyAppDomain]/webservices/server_user.php?wsdl", trace=True)

client = SoapClient(
location = "[myAppDomain]/webservices/server_user.php",
action = '[myAppDomain]/webservices/server_user.php?wsdl', # SOAPAction
namespace = "[myAppDomain]/webservices/server_user.php",
soap_ns='soap',
trace = True,
)
print("connected bitch")
except:
print("error connect")

message = dict()
message['use'] = "encoded"message["namespace"] = "http://www.dolibarr.org/ns/"message["encodingStyle"] = "http://schemas.xmlsoap.org/soap/encoding/"message["message"] = "getUserRequest"
parts = dict()
auth = dict()

auth['dolibarrkey'] = '********************************'
auth['sourceapplication'] = 'WebServicesDolibarrUser'
auth['login'] = '********'
auth['password'] = '********'
auth['entity'] = ''
parts["authentication"] = auth
parts["id"] = 1
parts["ref"] = "ref"parts["ref_ext"] = "ref_ext"message["parts"] = parts

# call the remote method
response = client.call(method='getUser', kwargs=message)

# extract and convert the returned value
# result = response.getUser
# return int(result)
print(response)
pass

У меня есть «BAD_VALUE_FOR_SECURITY_KEY» в ответе xlm, я думаю, что это мой запрос, выполненный с неверным форматом данных xml …

ответ оболочки:

-------- RESPONSE -------
b'<?xml version="1.0" encoding="UTF-8"?><SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="http://www.dolibarr.org/ns/"><SOAP-ENV:Body><ns1:getUserResponse xmlns:ns1="http://barrdoli.yhapps.com/webservices/server_user.php"><result xsi:type="tns:result"><result_code xsi:type="xsd:string">BAD_VALUE_FOR_SECURITY_KEY</result_code><result_label xsi:type="xsd:string">Value provided into dolibarrkey entry field does not match security key defined in Webservice module setup</result_label></result><user xsi:nil="true" xsi:type="tns:user"/></ns1:getUserResponse></SOAP-ENV:Body></SOAP-ENV:Envelope>'

Я действительно хочу знать, как мне сделать рабочий запрос мыла с чистым форматом данных xlm.

Спасибо

-2

Решение

Вы пытались настроить WebService Security (WSSE) с client объект? Следующие примеры взяты из https://code.google.com/p/pysimplesoap/wiki/SoapClient

client['wsse:Security'] = {
'wsse:UsernameToken': {
'wsse:Username': 'testwservice',
'wsse:Password': 'testwservicepsw',
}
}

или попробуйте настроить заголовок аутентификации AuthHeaderElement

client['AuthHeaderElement'] = {'username': 'mariano', 'password': 'clave'}
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector