首页 > 解决方案 > 获取 ARERR 149 必须在控制记录中提供用户名

问题描述

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

我搜索了这个错误并得到了这样的信息:“ARControlStruct 参数的名称字段为空。在此字段中提供 AR System 用户的名称。”但是我没有看到如何提供用户名参数。

标签: phppythonweb-servicessoapwsdl

解决方案


我得到了这个问题的解决方案。以下是我解决问题所遵循的步骤(我使用“zeep”一个第 3 方模块来解决这个问题):

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

python -mzeep wsdl_url

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

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

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

这清楚地传达了这一点,我必须使用 kwargs "_soapheaders" 传递参数和身份验证参数

有了这个我才知道我必须将我的身份验证元素作为 _soapheaders 参数传递给 MyOperation 函数。

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

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

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

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


推荐阅读