• Python使用urllib或requests调用WSDL接口


    import urllib.request
    import html
    
    url = "http://xx.xx.xx/xxx"
    target_namespace = "http://xx.xx.xx/"
    target_method = "xxxxxxxxxx"
    
    # 下面是接口的两个参数,这个按接口的要求来。
    # 需要注意的是参数在拼接成xml请求body时需要经过html编码,防止参数中的恶意字符导致xml注入
    param_aaa = "xxxxxxxxxxxx"
    param_bbb = "xxxxxxxxxx"
    
    body = '<?xml version="1.0"?>'
    body += f'<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" ' 
            f'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ' 
            f'xmlns:ns0="{target_namespace}" ' 
            f'xmlns:ns1="http://schemas.xmlsoap.org/soap/envelope/">'
    body += '<SOAP-ENV:Header/>'
    body += '   <ns1:Body>'
    body += f'      <ns0:{target_method}>'
    body += f'         <ns0:sTaskType>{html.escape(param_aaa)}</ns0:sTaskType>'  # 需要经过html编码
    body += f'         <ns0:sImport>{html.escape(param_bbb)}</ns0:sImport>'  # 需要经过html编码
    body += f'      </ns0:{target_method}>'
    body += '   </ns1:Body>'
    body += '</SOAP-ENV:Envelope>'
    
    # headers也可能是{'content-type': 'application/soap+xml'},需按实际的进行配置
    headers = {'content-type': 'text/xml'}
    req = urllib.request.Request(url, data=body.encode(), headers=headers)
    response = urllib.request.urlopen(req)
    if response.status != 200:
        raise Exception("query WSDL failed.")
    print(response.read().decode())
    
    # 如果使用requests库,则会更简便一些,速度也更快:
    import requests
    response = requests.post(url, data=body, headers=headers)
    if response.status_code != 200:
        raise Exception("query WSDL failed.")
    print(response.text)
    

      

  • 相关阅读:
    SQLServer 时间差运算
    phpStudy
    解决Apache/PHP无法启动的问题
    apche的主配置文件)
    知识总结
    学完了js的知识,一起分享总结知识点
    JS的学习体会与分享
    SpringBoot -- pom.xml文件
    c++基本知识点
    c语言基本常识5
  • 原文地址:https://www.cnblogs.com/tuzkee/p/15392362.html
Copyright © 2020-2023  润新知