Php Python suds错误服务器引发的错误:';会话已过期';

Php Python suds错误服务器引发的错误:';会话已过期';,php,python,soap,suds,Php,Python,Soap,Suds,我正在尝试编写一个python脚本来调用SOAP PHP API方法。我已经让它尽可能成功地获得所需的令牌,但是当我实际尝试调用任何方法时,我得到了一个错误 下面是我正在使用的代码,对某些数据进行了编辑 from suds.client import Client from suds.xsd.doctor import ImportDoctor, Import import logging from suds import WebFault import suds username = "a

我正在尝试编写一个python脚本来调用SOAP PHP API方法。我已经让它尽可能成功地获得所需的令牌,但是当我实际尝试调用任何方法时,我得到了一个错误

下面是我正在使用的代码,对某些数据进行了编辑

from suds.client import Client
from suds.xsd.doctor import ImportDoctor, Import
import logging
from suds import WebFault
import suds


username = "apiUserAccount"
password = "apiPassword"
keyword = "computerNameImSearchingFor"

logging.getLogger('suds.client').setLevel(logging.CRITICAL)

url = 'url/to/service.php?wsdl'  # wsdl api url
tns = 'url/to/api/'  # target name space from php
#fixing broken schema
imp = Import('http://schemas.xmlsoap.org/soap/encoding/')
imp.filter.add(tns)

client = Client(url, plugins=[ImportDoctor(imp)])  # calling api
print client

#This calls the request for an authentication token
auth_token = client.service.auth_request_api(username, password)
username = "myUserName"
password = "myPassword"
user_login = client.service.auth_request_user(auth_token, username, password)
#this works
print "api token: " + api_token
#this also works
print "login token: " + login

#This doesn't work...
try:
    print client.service.search_in_namehost(user_login, keyword)
except suds.WebFault as detail:
    print detail
在方法调用
search\u in\u namehost
中抛出错误,这是输出,为了节省空间,我删除了其中一些

Suds ( https://fedorahosted.org/suds/ )  version: 0.4 GA  build: R699-20100913

Service ( SERVICENAME ) tns="address/to/server/api/"
   Prefixes (2)
      ns0 = "http://schemas.xmlsoap.org/soap/encoding/"
      ns1 = "http://address/to/server/api/"
   Ports (1):
      (SERVICENAME_serviceSoap)
         Methods (20):
            auth_request_api(xs:string username, xs:string password, )
            auth_request_user(xs:string auth_token, xs:string username, xs:string password, )
            search_in_namehost(xs:string login_token, xs:string keyword, )
         Types (50):
            ns0:Array
            ns0:ENTITIES
            ns0:ENTITY
            ns0:ID
            ns0:IDREF
            ns0:IDREFS

api token: alphaNumericApiToken
login token: alphaNumericApiToken
Traceback (most recent call last):
  File "/path/to/my/python/script.py", line 42, in <module>
    result = client.service.incidents_list(user_login)
  File "build/bdist.macosx-10.10-intel/egg/suds/client.py", line 542, in __call__
  File "build/bdist.macosx-10.10-intel/egg/suds/client.py", line 602, in invoke
  File "build/bdist.macosx-10.10-intel/egg/suds/client.py", line 643, in send
  File "build/bdist.macosx-10.10-intel/egg/suds/client.py", line 678, in succeeded
  File "build/bdist.macosx-10.10-intel/egg/suds/bindings/binding.py", line 154, in get_reply
  File "build/bdist.macosx-10.10-intel/egg/suds/bindings/binding.py", line 498, in returned_types
  File "build/bdist.macosx-10.10-intel/egg/suds/bindings/binding.py", line 441, in bodypart_types
suds.TypeNotFound: Type not found: '(array, http://internalserver/servicename/api/, )'

Process finished with exit code 1
这就是我在终端中运行php
test.php
时得到的结果

localhost:Documents username$ sudo php phpinfo.php 
Array
(  
    [0] => Array
        (
            [title] => computername
            [section] => Hosts
            [incident] => Test Incident - DO NOT DELETE
            [url] => https://urlToIncident
        )

)
test.php
将其输出到终端

localhost:Documents username$ sudo php phpinfo.php 
Array
(  
    [0] => Array
        (
            [title] => computername
            [section] => Hosts
            [incident] => Test Incident - DO NOT DELETE
            [url] => https://urlToIncident
        )

)
考虑到我可以成功地获取数据,我知道问题出在sud上,但我对PHP和sud的使用都没有什么经验,我正在使用的sud和API的文档也没有我希望的那么健壮。如果能得到任何帮助,我将不胜感激

更新 很抱歉,如果我没有正确编辑这个,我是新来这里发帖的,但我已经取得了一些进展

因此,一位熟悉SOAP但不熟悉python的同事建议我改变向方法调用传递参数的方式。所以我这样做了,并相应地编辑了上面的代码以及带有新错误的输出。在这一点上,我确信python正在从该方法获取信息,但不一定能够处理它的呈现方式


正如我前面提到的,当您调用test.php时,终端中的输出是什么样子的,我计算了返回该值所需的时间,与脚本到达该方法调用后返回该新错误所需的时间相比,它们大致相同。在此之前,我几乎立即收到会话过期错误。所以现在我想问题是让python正确处理它得到的数据,我现在正在努力解决这个问题。

多亏了一位同事的帮助,他发现问题出在我使用的WSDL上。Suds正在寻找一种不存在的阵列类型。一旦我在WSDL中更改了该类型的所有实例,一切都正常工作。不幸的是,我无法发布WSDL,但如果有人碰巧有任何问题,我很乐意尽我所能回答问题。

多亏了一位同事的帮助,他发现问题出在我使用的WSDL上。Suds正在寻找一种不存在的阵列类型。一旦我在WSDL中更改了该类型的所有实例,一切都正常工作。不幸的是,我不能发布WSDL,但如果有人碰巧有WSDL,我很乐意尽我所能回答问题