zoukankan      html  css  js  c++  java
  • python接口自动化(二十) 发xml格式post请求

    前言

    post请求相对于get请求多一个body部分,body部分常见的数据类型有以下四种(注意是常见的,并不是只有4种)

    • application/x-www-form-urlencoded
    • application/json
    • text/xml
    • multipart/form-data

    本篇讲xml这种类型的body案例,如何用python去实现

    1.打开fiddler抓包工具,使用python发送一个post请求

    import requests
    s=requests.session()
    s.post("http://httpbin.org/post")
    

    2.查看fiddler中显示该条请求;选中该请求,点击【Composer】,History中双击该请求,Request Body中添加如下内容;  

    <?xml version=“1.0” encoding = “UTF-8”?>
    <COM>
    <REQ name="武汉会">
    <USER_ID>huihui</USER_ID>
    <COMMODITY_ID>8888</COMMODITY_ID>
    <SESSION_ID>good</SESSION_ID>
    </REQ>
    </COM> 

    3.点击右上角的【Execute】就执行了。

    4.查看fiddler中刚刚执行的post请求,body部分类型是xml格式,点击raw,看到body部分格式如下。

     python实现

    1.xml格式的body部分直接写成一个字符串类型就行了,遇到换行的字符串,在后面加个反斜杠()

    2.body参数用data去接收传入,要是遇到编码问题报错,就对body部分encode下再传入;

    import requests
    s=requests.session()
    bb='<?xml version=“1.0” encoding = “UTF-8”?>
    <COM>
    <REQ name="武汉会">
    <USER_ID>huihui</USER_ID>
    <COMMODITY_ID>8888</COMMODITY_ID>
    <SESSION_ID>good</SESSION_ID>
    </REQ>
    </COM>'
    
    r=s.post("http://httpbin.org/post",data=bb.encode("utf-8"))
    #print(r.text)#显示结果含有unicode码
    print(r.text.encode('utf-8').decode('unicode_escape'))  

     3.运行结果

     

     读取xml数据

    1.xml格式的数据写到代码里面,不太直观,后期维护也不方便,可以把xml格式数据单独拿出来写到一个文件里,再用open函数去读取。

    pycharm中新建xml方式,在当前.py脚本的目录,New——File——弹出New File窗口。

     输入名字,点击【ok】,弹出的Register New File Type Association窗口中选择【XML】,点击【ok】,完事。

     2.新建的xml中输入如下图内容

    <?xml version=“1.0” encoding = “UTF-8”?>
    <COM>
    <REQ name="武汉会">
    <USER_ID>huihui</USER_ID>
    <COMMODITY_ID>8888</COMMODITY_ID>
    <SESSION_ID>good</SESSION_ID>
    </REQ>
    </COM> 

    3.使用open函数取读取xml内容,参考代码

    import requests
    s=requests.session()
    with open("bbo_xml",encoding="utf-8") as fp:
        body=fp.read()
    print(body)
    print() #换行
    r=s.post("http://httpbin.org/post",data=body.encode("utf-8"))
    print(r.text.encode('utf-8').decode('unicode_escape'))  

    4.运行结果

     

    C:UsersAdministratorAppDataLocalProgramsPythonPython37python.exe D:/Python0811/OPMS/uppic/a.py
    <?xml version=“1.0” encoding = “UTF-8”?>
    <COM>
    <REQ name="武汉会">
    <USER_ID>huihui</USER_ID>
    <COMMODITY_ID>8888</COMMODITY_ID>
    <SESSION_ID>good</SESSION_ID>
    </REQ>
    </COM>
    
    {
      "args": {}, 
      "data": "<?xml version=“1.0” encoding = “UTF-8”?>
    <COM>
    <REQ name="武汉会">
    <USER_ID>huihui</USER_ID>
    <COMMODITY_ID>8888</COMMODITY_ID>
    <SESSION_ID>good</SESSION_ID>
    </REQ>
    </COM>", 
      "files": {}, 
      "form": {}, 
      "headers": {
        "Accept": "*/*", 
        "Accept-Encoding": "gzip, deflate", 
        "Content-Length": "181", 
        "Host": "httpbin.org", 
        "User-Agent": "python-requests/2.22.0", 
        "X-Amzn-Trace-Id": "Root=1-5f2ac996-7439b920e4df2a90472d1230"
      }, 
      "json": null, 
      "origin": "183.95.51.5", 
      "url": "http://httpbin.org/post"
    }
    
    
    Process finished with exit code 0
    

      

    越努力,越幸运!!! good good study,day day up!!!
  • 相关阅读:
    CC3200作为STA模式连接路由器sl_WlanConnect出现exception occured at:0xa72fcf6
    HI2115软件开发板V150版本AT+NSOST指令
    利尔达NB-IOT模块对接移动onenet平台步骤
    ip4addr_ntoa和不可重入函数
    VHDL入门学习-程序组成
    nexys4-DDR开发板温度传感器ADT7420U
    2016-2017股票亏损反省
    一起来学linux:例行性任务之at和crontab
    linux c编程:进程间通信
    一起来学linux:sudo
  • 原文地址:https://www.cnblogs.com/canglongdao/p/13443404.html
Copyright © 2011-2022 走看看