API Polarion ALM 偶尔不授权任何请求
API of Polarion ALM occasionally does not authorize any request
我写了一些 Python 代码,通过 API 登录并从 Polarion ALM 服务器读取一些数据(有关 Polarion API 的更多信息:https://almdemo.polarion.com/polarion/sdk/index.html)。在我的代码中,我使用了 zeep Python 包来处理 SOAP。
我的算法很简单:
1) 通过 logIn 网络服务登录 (https://almdemo.polarion.com/polarion/sdk/doc/javadoc/com/polarion/alm/ws/client/session/SessionWebService.html#logIn-java.lang.String-java.lang.String-)
2) 将当前 session 添加到 header - 因此当前 session 仍然存在。
3) 尝试读取一些数据,例如通过 getRootProjectGroup 网络服务 (https://almdemo.polarion.com/polarion/sdk/doc/javadoc/com/polarion/alm/ws/client/projects/ProjectWebService.html#getRootProjectGroup--).
4) 无论发生什么,我都通过 endSession Web 服务 (https://almdemo.polarion.com/polarion/sdk/doc/javadoc/com/polarion/alm/ws/client/session/SessionWebService.html#endSession--) 关闭了当前的 session。
我观察到的:
偶尔,在第 3 点我收到授权错误的响应(响应片段):
<soapenv:Fault>\n <faultcode>soapenv:Server.generalException</faultcode>\n <faultstring>Not authorized.</faultstring>\n <detail>\n <ns1:stackTrace xmlns:ns1="http://xml.apache.org/axis/">Not authorized.\n\tat com.polarion.alm.ws.providers.DoAsUserWrapper.invoke(DoAsUserWrapper.java:37)\n\tat org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)\n\t..
或者一切都很好,我收到:
{
'groupURIs': {
'SubterraURI': [
'subterra:data-service:objects:/default/${ProjectGroup}Group'
]
},
'location': None,
'name': 'ROOT_CTX_NAME',
'parentURI': None,
'projectIDs': None,
'uri': 'subterra:data-service:objects:${ProjectGroup}Group',
'unresolvable': False
}
最让我惊讶的是:
- 我总是使用相同的凭据(用户名和密码)
- 请求中的 session ID(第 3 点)与登录期间服务器响应(第 1 点)中的相同,因此 session 应保持活动状态
- 如果我将我的代码放入循环中(例如 1000 次执行),所有尝试的结果总是相同的(1000 次成功或 1000 次失败),即使我在 attemps[=17= 之间添加等待(例如 1s) ]
我想知道服务器拒绝某些请求的原因。是某种 Polarion 服务器问题吗?我怎样才能解决以某种方式连接到服务器并能够从服务器读取一些数据,即使它拒绝了我的第一个请求。
看来这是 SOAP 客户端(以及相对流行的客户端)的问题。为了修复它,我关闭了 TLS 验证。更多详细信息:
https://python-zeep.readthedocs.io/en/master/transport.html
我写了一些 Python 代码,通过 API 登录并从 Polarion ALM 服务器读取一些数据(有关 Polarion API 的更多信息:https://almdemo.polarion.com/polarion/sdk/index.html)。在我的代码中,我使用了 zeep Python 包来处理 SOAP。
我的算法很简单:
1) 通过 logIn 网络服务登录 (https://almdemo.polarion.com/polarion/sdk/doc/javadoc/com/polarion/alm/ws/client/session/SessionWebService.html#logIn-java.lang.String-java.lang.String-)
2) 将当前 session 添加到 header - 因此当前 session 仍然存在。
3) 尝试读取一些数据,例如通过 getRootProjectGroup 网络服务 (https://almdemo.polarion.com/polarion/sdk/doc/javadoc/com/polarion/alm/ws/client/projects/ProjectWebService.html#getRootProjectGroup--).
4) 无论发生什么,我都通过 endSession Web 服务 (https://almdemo.polarion.com/polarion/sdk/doc/javadoc/com/polarion/alm/ws/client/session/SessionWebService.html#endSession--) 关闭了当前的 session。
我观察到的:
偶尔,在第 3 点我收到授权错误的响应(响应片段):
<soapenv:Fault>\n <faultcode>soapenv:Server.generalException</faultcode>\n <faultstring>Not authorized.</faultstring>\n <detail>\n <ns1:stackTrace xmlns:ns1="http://xml.apache.org/axis/">Not authorized.\n\tat com.polarion.alm.ws.providers.DoAsUserWrapper.invoke(DoAsUserWrapper.java:37)\n\tat org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)\n\t..
或者一切都很好,我收到:
{
'groupURIs': {
'SubterraURI': [
'subterra:data-service:objects:/default/${ProjectGroup}Group'
]
},
'location': None,
'name': 'ROOT_CTX_NAME',
'parentURI': None,
'projectIDs': None,
'uri': 'subterra:data-service:objects:${ProjectGroup}Group',
'unresolvable': False
}
最让我惊讶的是:
- 我总是使用相同的凭据(用户名和密码)
- 请求中的 session ID(第 3 点)与登录期间服务器响应(第 1 点)中的相同,因此 session 应保持活动状态
- 如果我将我的代码放入循环中(例如 1000 次执行),所有尝试的结果总是相同的(1000 次成功或 1000 次失败),即使我在 attemps[=17= 之间添加等待(例如 1s) ]
我想知道服务器拒绝某些请求的原因。是某种 Polarion 服务器问题吗?我怎样才能解决以某种方式连接到服务器并能够从服务器读取一些数据,即使它拒绝了我的第一个请求。
看来这是 SOAP 客户端(以及相对流行的客户端)的问题。为了修复它,我关闭了 TLS 验证。更多详细信息: https://python-zeep.readthedocs.io/en/master/transport.html