关于python请求webservices携带wsse验证的问题

项目上又一个需求需要我去对接webservices的接口。以xml报文的形式去请求;

之前很少接触到xml,于是在网上找到了python的suds库;非常强大

首先是安装suds,直接pip就行了;python3的话需要pip install suds-jurko即可

首先引入suds

from suds.client import Client
url = "http://erptrn.cpihn.com:8002/webservices/SOAProvider/plsql/cux_soa_risk_pre_v3_pkg/?wsdl";
def sendmsg_to_workTicketbase(P_ORG_ID , P_WORK_DATE , P_END_DATE):
    client = Client(url)
    print(client)

此时你可以看到这个wsdl下所有的接口名字以及需要传入的参数,那么接下来就是调用了

def sendmsg_to_workTicketbase(P_ORG_ID , P_WORK_DATE , P_END_DATE):
    client = Client(url)
    result = client.service.GET_SOA_WORK_TICKET_BASE(P_ORG_ID =P_ORG_ID , P_WORK_DATE=P_WORK_DATE, P_END_DATE =         P_END_DATE)
    return result

此时可能会报错,也就是我提到的wsse验证权限。由于我这个wsdl是oracle直接生成的,oracle有两个权限,一个是修改数据库的权限,一个是数据获取权限,那么这个wsse就是用户获取数据权限。我们需要给我们的请求携带wsse参数。

如下:

def sendmsg_to_workTicketbase(P_ORG_ID , P_WORK_DATE , P_END_DATE):
    client = Client(url)
    security = Security()
    token = UsernameToken('xxx','xxx')
    security.tokens.append(token)
    client.set_options(wsse=security)
    result = client.service.GET_SOA_WORK_TICKET_BASE(P_ORG_ID =P_ORG_ID , P_WORK_DATE=P_WORK_DATE, P_END_DATE = P_END_DATE)
    return result

代码中的xxx代表的是用户名密码。系统把这个数据获取权给了谁,需要用这样的形式去访问,类似于cookie。

你可能感兴趣的:(python)