项目上又一个需求需要我去对接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。