前言

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. AtCoder Regular Contest 062 E - AtCoDeerくんと立方体づくり / Building Cubes with AtCoDeer

    题目传送门:https://arc062.contest.atcoder.jp/tasks/arc062_c 题目大意: 给你\(N\)块正方形木板,每块木板四角有四种颜色(可以相同),木板中央有编号 ...

  2. Codeforces Round #405 (rated, Div. 2, based on VK Cup 2017 Round 1) D

    Description A tree is an undirected connected graph without cycles. The distance between two vertice ...

  3. 水题 Codeforces Round #303 (Div. 2) D. Queue

    题目传送门 /* 比C还水... */ #include <cstdio> #include <algorithm> #include <cstring> #inc ...

  4. 153 Find Minimum in Rotated Sorted Array 旋转数组的最小值

    假设一个按照升序排列的有序数组从某未知的位置旋转.(比如 0 1 2 4 5 6 7 可能变成 4 5 6 7 0 1 2).找到其中最小的元素.你可以假设数组中不存在重复的元素.详见:https:/ ...

  5. RHEL 6.5----heartbeat

    主机名 IP  所需软件  master 192.168.30.130  heartbeat.httpd node-1 192.168.30.131  nfs  node-2 192.168.30.1 ...

  6. Unity3D中GameObject 详细介绍

    通过Hierarchy面板下的Create菜单可以手动地创建一个GameObject,它可以是一个相机,一个灯光,或者一个简单的模型,当我们要在程序里面动态地创建一个相机的时候,可以new一个Game ...

  7. AJPFX简述Java中this关键字的使用

    Java中this关键字的使用主要有两处: 1.构造方法 this指的是调用构造方法进行初始化的对象. //有参构造public Human(String name, int age) { this( ...

  8. VS2013编译libjpeg库

    第一步:找到刚刚解压出来的“jpeg-9a”文件夹下面的“makefile.vc”文件,用记事本或Notepad++等编辑工具打开,然后找到里面的“!include <win32.mak> ...

  9. 使用JavaScript给对象修改注册监听器

    我们在开发一些大型前端项目时,会遇到这样一种情况,某个变量上有个字段.我们想知道是哪一段程序修改了这个变量上的字段.比如全局变量window上我们自定义了一个新字段_name,我们想知道到底有哪些程序 ...

  10. liunx 修改IP地址

    1.安装centos系统,这里就不详细说明了. 2.进入到 vi /etc/sysconfig/network-scripts/ifcfg-eth0      后面的名称有些可能不同 其中,有些可能没 ...