前言

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

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

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

text/xml

1.首先要确定post请求的body部分类型是xml格式,可以用fiddler抓包工具,抓到请求后点开raw。看到body部分格式如下

<?xml version=“1.0” encoding = “UTF-8”?>
<COM>
<REQ name="上海-悠悠">
<USER_ID>yoyoketang</USER_ID>
<COMMODITY_ID>123456</COMMODITY_ID>
<SESSION_ID>absbnmasbnfmasbm1213</SESSION_ID>
</REQ>
</COM>

使用fiddler模拟

1.先不着急去写python代码,先在工具上请求一次,看能不能请求成功,点开fiddler工具上composer菜单

2.将xml数据直接复制到右下方Request Body部分,然后点右上角Execute就能执行了

python实现

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

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

# coding:utf-8
import requests

# 作者:上海-悠悠 QQ交流群:588402570
url = "http://httpbin.org/post"

# python3字符串换行,在右边加个反斜杠
body = '<?xml version="1.0" encoding = "UTF-8"?>' \
       '<COM>' \
       '<REQ name="上海-悠悠">' \
       '<USER_ID>yoyoketang</USER_ID>' \
       '<COMMODITY_ID>123456</COMMODITY_ID>' \
       '<SESSION_ID>absbnmasbnfmasbm1213</SESSION_ID>' \
       '</REQ>' \
       '</COM>'

# 遇到编码报错时候,对body进行encode
r = requests.post(url, data=body.encode("utf-8"))
print(r.text)

3.运行结果

{"args":{},"data":"<?xml version=\"1.0\" encoding = \"UTF-8\"?><COM><REQ name=\"\u4e0a\u6d77-\u60a0\u60a0\"><USER_ID>yoyoketang</USER_ID><COMMODITY_ID>123456</COMMODITY_ID><SESSION_ID>absbnmasbnfmasbm1213</SESSION_ID></REQ></COM>","files":{},"form":{},"headers":{"Accept":"*/*","Accept-Encoding":"gzip, deflate","Connection":"close","Content-Length":"192","Host":"httpbin.org","User-Agent":"python-requests/2.18.4"},"json":null,"origin":"116.228.224.250","url":"http://httpbin.org/post"}

读xml数据

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

2.新建一个body1_xml文件,写入内容如下:

<?xml version="1.0" encoding = "UTF-8"?>
<COM>
<REQ name="上海-悠悠">
<USER_ID>yoyoketang</USER_ID>
<COMMODITY_ID>123456</COMMODITY_ID>
<SESSION_ID>absbnmasbnfmasbm1213</SESSION_ID>
</REQ>
</COM>

3.用open函数去读xml内容

# coding:utf-8
import os
# 作者:上海-悠悠 QQ交流群:588402570

curpath = os.path.dirname(os.path.realpath(__file__))
xmlpath = os.path.join(curpath, "body1_xml")

with open(xmlpath, encoding="utf-8") as fp:
    body = fp.read()

# 读取xml文件
print(body)

3.参考代码:

# coding:utf-8
import requests
# 作者:上海-悠悠 QQ交流群:588402570

url = "http://httpbin.org/post"

# xml格式body
with open("body1_xml", encoding="utf-8") as fp:
    body = fp.read()
print(body)

# 遇到编码报错时候,对body进行encode
r = requests.post(url, data=body.encode("utf-8"))

print(r.text)

python接口自动化-发xml格式post请求的更多相关文章

  1. python接口自动化(十)--post请求四种传送正文方式(详解)

    简介 post请求我在python接口自动化(八)--发送post请求的接口(详解)已经讲过一部分了,主要是发送一些较长的数据,还有就是数据比较安全等.我们要知道post请求四种传送正文方式首先需要先 ...

  2. python接口自动化一(发送get请求)

    一.环境安装 1.用pip安装requests模块 >>pip install requests 二.get请求 1.导入requests后,用get方法就能直接访问url地址,如:htt ...

  3. Python接口自动化【requests处理Token请求】

    首先说一下使用python模拟登录或注册时,对于带token的页面怎么登录注册模拟的思路: 1.对于带token的页面,需要先从最开始的页面获取合法token 2.然后使用获取到的合法token进行后 ...

  4. python接口自动化(四十一)- 发xml格式参数的post请求(超详解)

    简介 最近在工作中,遇到一种奇葩的接口,它的参数数据是通过xml,进行传递的,不要大惊小怪的,林子大了什么鸟都有,每个人的思路想法不一样,开发的接口也是各式各样的,如果想要统一的话,必须是提前团队已经 ...

  5. python接口自动化25-发xml格式post请求

    前言 post请求相对于get请求多一个body部分,body部分常见的数据类型有以下四种(注意是常见的,并不是只有4种) application/x-www-form-urlencoded appl ...

  6. python接口自动化26-发xml格式post请求《转载》

    python接口自动化26-发xml格式post请求 https://cloud.tencent.com/developer/article/1164987

  7. python接口自动化1-发送get请求

    前言 requests模块,也就是老污龟,为啥叫它老污龟呢,因为这个官网上的logo就是这只污龟,接下来就是学习它了. 一.环境安装 1.用pip安装requests模块 >>pip in ...

  8. python接口自动化9-https请求(SSL)

    前言 本来最新的requests库V2.13.0是支持https请求的,但是一般写脚本时候,我们会用抓包工具fiddler,这时候会报:requests.exceptions.SSLError: [S ...

  9. python接口自动化(put请求)

    python接口自动化(put请求) 一.put请求的作用:更新资源 二.应用 导包:import requests 调用requests.put()方法 参数有URL.data.headers,方法 ...

随机推荐

  1. 洛谷 P2398 GCD SUM || uva11417,uva11426,uva11424,洛谷P1390,洛谷P2257,洛谷P2568

    https://www.luogu.org/problemnew/show/P2398 $原式=\sum_{k=1}^n(k\sum_{i=1}^n\sum_{j=1}^n[(i,j)=k])$ 方法 ...

  2. JAVA常用设计模式(静态化调用和实例化调用的区别,编辑可见 )

    用newInstance()与用new是区别的,区别在于创建对象的方式不一样,前者是使用类加载机制,后者是创建一个新类,且newInstance()只能调用无参构造函数. 最大的区别在于内存.静态方法 ...

  3. 135 Candy 分配糖果

    There are N children standing in a line. Each child is assigned a rating value.You are giving candie ...

  4. toLocaleSting()

    之前一直忽略了这一方法,直到前天的笔试题,两种方式实现如下功能... 1234567890→1,234,567,890 当时我的思路是这样的:1.字符串反转,插入逗号,再反转 2.求余数,将字符串一分 ...

  5. ionic back 返回按钮不正常显示&&二级路由点击返回按钮失效无法返回到上一级页面的问题

    很多时候,app不只有一两级路由,还要三四级路由,但是在ionic中,给出的返回键三级或四级无法使用,所以得自定义方法设置返回. 直接贴代码: <ion-nav-buttons side=&qu ...

  6. RabbitMQ十:重要方法简述(参数)

    主要方法 前言 经过前面的学习,RabbitMQ 已经拙见有一定认识和了解,今天主要针对我们在前面学习方法进行一次小总结,本篇文章也想在开头写的,但是后来考虑,如果我都把方法都一一列举,我想大家都没很 ...

  7. AJPFX总结之Socket编程

    一.Socket简介 Socket是进程通讯的一种方式,即调用这个网络库的一些API函数实现分布在不同主机的相关进程之间的数据交换. 几个定义: (1)IP地址:即依照TCP/IP协议分配给本地主机的 ...

  8. #pragma使用分析

    #pragma简介 #pragma用于指示编译器完成一些特定的动作 #pragma所定义的很多指示字是编译器特有的 #pragma在不同的编译器间是不可移植的 预处理器将忽略它不认识的#pragma指 ...

  9. asp.net 中文部分显示问号

    很神奇的事情,今天部署了一个网站,页面从数据读取新闻后,有些新闻标题全部显示问题号,有几个新闻能正确显示汉字,然后查看新闻页面又能正常显示汉字. 解决办法: 在异常的页面上加上 < %@ COD ...

  10. KendoUI Grid Pager部分 Nan-Nan of x Items

    相关问题: http://stackoverflow.com/questions/23941065/pager-error-in-kendo-gridnan-nan-of-1-items http:/ ...