Выполнение вызова BMC Remedy SOAP WSDL через python zeep с правильной аутентификацией - PullRequest
0 голосов
/ 24 мая 2019

Мне было дано задание выполнить вызов данных SOAP WSDL для BMC Remedy в Python.У меня есть только фрагмент кода PHP для справки.

У меня есть следующие проблемы: 1: я не знаю точный формат передачи данных в метод New_GetList_Operation_0 через Python, а также вручную (скажем, через SOAP UI), как ятолько 2 с REST API json до: я пробовал ниже код Python просто случайно, но я получаю ошибку ниже: ARERR [149] Имя пользователя должно быть указано в контрольной записи

Запрос на помощь выше 2касается.

Код PHP:

public function getRemedyData($params) {
    $client     = new SoapClient($this->_Wsdl, $this->soapOptions);
    $authvalues = new SoapVar($this->_bmcAuth, SOAP_ENC_OBJECT);
    $header     = new SoapHeader("New_GetList_Operation_0", "AuthenticationInfo", $authvalues, false);
    $client->__setSoapHeaders(array($header));
    try {
        $result                = $client->__soapCall("New_GetList_Operation_0", array($params));
        $resultArray           = array('code' => "0", 'message' => "successful");
        $resultArray["result"] = $result;
    } catch (Exception $e) {
        $errMsg = $e->getMessage();

        $resultArray = array('code' => "1", 'message' => $errMsg);
    }
    return $resultArray;
}

$params = array(
    'Qualification' => '\'Modified Date\' >= "' . $dateTimeValue . '" and \'Categorization Tier 2\' = "<<xx Scan>>" and \'Submitter\' = "validusername"'
);
$result = $this->Remedy->getRemedyData($params);

Код Python:

import zeep
from zeep.wsse.username import UsernameToken
from requests import Session
from requests.auth import HTTPBasicAuth  # or HTTPDigestAuth, or OAuth1, etc.
from zeep import Client
session = Session()
session.auth = HTTPBasicAuth('<<valid_username>>', '<<valid_password>>')
client = Client("url:8080/arsys/WSDL/public/xx/xx:xx:QueryWebService",
                wsse = UsernameToken('<<valid_username>>', '<<valid_password>>'))
header = zeep.xsd.Element(
    'Security',
    zeep.xsd.ComplexType([
        zeep.xsd.Element(
            'UsernameToken',
            zeep.xsd.ComplexType([
                zeep.xsd.Element('Username',zeep.xsd.String()),
                zeep.xsd.Element('Password',zeep.xsd.String()),
            ])
        ),
    ])
)
header_value = header(UsernameToken={'Username': '<<valid_username>>', 'Password': '<<valid_password>>'})
with client.settings(raw_response=True):
    response = client.service.New_GetList_Operation_0(
        _soapheaders=[header_value],
        Qualification='\'Modified Date\' >= "05/14/2017" and \'Categorization Tier 2\' = "<<xx Scan>>" and \'Submitter\' = "<<valid_username>>"'
    )
print(response.content)
...