获取ARERR 149必须在控制记录中提供用户名

时间:2019-05-07 06:21:52

标签: php python web-services soap wsdl

我有一个SOAP url,当通过浏览器运行url时,我得到wsdl响应。但是,当我尝试使用所需的参数列表在响应中调用方法时,它显示“ ARERR [149] A用户名必须在控制记录中提供。”我尝试使用PHP和python,但遇到相同的错误。

我搜索了此错误,并得到了如下信息:“ ARControlStruct参数的名称字段为空。在此字段中提供AR System用户的名称。”。但是我什么地方都看不到如何提供用户名参数。

1 个答案:

答案 0 :(得分:0)

我已经找到了解决这个问题的方法。下面是解决该问题的步骤(我使用“ zeep”第3方模块来解决此问题):

  1. 运行以下命令以了解WSDL:

python -mzeep wsdl_url

  1. 搜索字符串“ Service:”。在下面可以看到我们的操作名称

  2. 对于我的操作,我发现以下条目:

MyOperation(参数...,_soapheaders = {参数:ns0:AuthenticationInfo})

清楚地表明,我必须使用kwargs“ _soapheaders”传递参数和auth参数

由此我知道我必须将身份验证元素作为_soapheaders参数传递给MyOperation函数。

  1. 创建的身份验证元素:

auth_ele = client.get_element('ns0:AuthenticationInfo') auth = auth_ele(userName ='me',password ='mypwd')

  1. 将身份验证传递给我的操作:

cleint.service.MyOperation('parameters ..',_soapheaders = [auth])