我在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))
浏览了很多,但似乎没什么用处。 任何帮助?
答案 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是我的应用程序名称(只是一个字符串)
干杯