dsfsda121545 2019-05-24 12:14
浏览 227

通过python zeep通过适当的身份验证调用BMC Remedy SOAP WSDL

I have been given a task to make call to SOAP WSDL data for BMC Remedy in Python. I only have PHP code snippet for reference.

I have below issues, 1: I do not know the exact format of passing data in the New_GetList_Operation_0 method via Python as well as manually(say via SOAP UI) as I only dealth with json REST APIs before 2: I tried below python code just randomly, but I am getting below error: ARERR [149] A user name must be supplied in the control record

Request to assist on above 2 concerns.

PHP Code:

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 Code:

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)
  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 用matlab 设计一个不动点迭代法求解非线性方程组的代码
    • ¥15 牛顿斯科特系数表表示
    • ¥15 arduino 步进电机
    • ¥20 程序进入HardFault_Handler
    • ¥15 oracle集群安装出bug
    • ¥15 关于#python#的问题:自动化测试
    • ¥20 问题请教!vue项目关于Nginx配置nonce安全策略的问题
    • ¥15 教务系统账号被盗号如何追溯设备
    • ¥20 delta降尺度方法,未来数据怎么降尺度
    • ¥15 c# 使用NPOI快速将datatable数据导入excel中指定sheet,要求快速高效