zoukankan      html  css  js  c++  java
  • 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)
    

      

  • 相关阅读:
    SQL之mysql常用操作语句(入门级)
    总结了一些指针易出错的常见问题(七)
    C++之类和对象课后习题1
    SQL之50个常用的SQL语句
    SQL之经典SQL语句大全
    C语言之计算字符串最后一个单词的长度,单词以空格隔开
    spring之HttpInvoker
    Java之解压流(ZipInputStream)
    jetty之嵌入式开发
    java之压缩流(ZipOutputStream)
  • 原文地址:https://www.cnblogs.com/tuzkee/p/15392362.html
Copyright © 2011-2022 走看看