在python中调用SOAP客户端(suds)返回错误AuthenticationError.LOGIN_COOKIE_REQUIRED

时间:2016-04-01 09:33:21

标签: python api soap suds

我在python中已经1周大了。 我从python调用suds soap api。 这是我的代码。

logging.basicConfig(level=logging.INFO)
if __debug__:
    logging.getLogger('suds.client').setLevel(logging.DEBUG)
else:
    logging.getLogger('suds.client').setLevel(logging.CRITICAL)
client = Client(wsdlurl, soapheaders='string')
# Create ClientCustomerId parameter value for mutate method
clientId = client.factory.create("ClientCustomerId")
product = client.factory.create("Product")
clientId.product = product.INVITE_ADVERTISER
clientId.entityId = XXXX

# Create UserListOperation parameter value for mutate method
# Create UserList Object
userList = client.factory.create("UserList")
millis = int(round(time.time() * 1000))
userList.name = "Demographic segment # %s" % millis
userList.description = "Target dempographic description"
userList.integrationCode = "XXX"
d = timedelta(days=365)
userList.membershipLifeSpan = d.days
userListOperation = client.factory.create("UserListOperation")
userListOperation.operand = userList
operator = client.factory.create("Operator")
userListOperation.operator = operator.ADD
print userListOperation
operations = [userListOperation]
result = client.service.mutate(clientId, userListOperation)  //Error raises here
print result

调用mutate()方法时会收到类似Server raise fault的错误:' [AuthenticationError.LOGIN_COOKIE_REQUIRED @;触发:'']'

我在客户端方法中添加了soap = client(wsdlurl,soapheaders =' string')等肥皂头,否则我收到错误'缺少肥皂标题'

因为它是登录cookie错误尝试传递访问令牌但没有任何效果。     client =客户端(wsdlurl,标题{'密钥':'值'},soapheaders ='字符串')#,soapheaders {' userAgent' :'管理员'})

#atoken = Element('token').setText(token)
#locale = Element('locale').setText('en')
#client.set_options(soapheaders=(atoken,locale))

浏览了很多,但似乎没什么用处。 任何帮助?

1 个答案:

答案 0 :(得分:1)

最后我找到了解决方案,可能对任何初学者都有用。

在使用suds模块调用SOAP API时,我们需要设置标头,在我的情况下,我从OAuth身份验证中传递访问令牌,就像这样

code='Bearer %s'%accToken
headers={'Authorization':code}
client = Client(wsdlurl,headers=headers,soapheaders=(appname))

这里accToken是我的访问令牌,header是一个字典,我传递的密钥是'Authorization',Value是'Bearer XXX(accToken)',appname是我的应用程序名称(只是一个字符串)

干杯