接口测试中发送XML格式的post请求

前言

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)
  • 7
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,以下是一个示例代码,用于在Spring Boot生成HTTP服务,并解析JSON格式请求: 1. 添加依赖 在 pom.xml 文件添加以下依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </dependency> ``` 2. 编写代码 在 Spring Boot 应用程序,您可以使用 @RestController 和 @RequestMapping 注释来定义 HTTP 服务。使用 @RequestBody 注释可以将请求体作为 JSON 对象解析。 下面是一个示例代码: ```java import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.web.bind.annotation.*; @SpringBootApplication @RestController @RequestMapping("/example") public class HttpServiceExample { @PostMapping public String handleRequest(@RequestBody MyRequest request) { return "Hello, " + request.getName() + "!"; } public static void main(String[] args) { SpringApplication.run(HttpServiceExample.class, args); } static class MyRequest { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } } } ``` 3. 运行应用程序 现在,您可以运行应用程序并使用任何 HTTP 客户端工具向路径“/example” POST 请求请求的主体应该包含一个名为“name”的 JSON 属性。 例如,如果您使用 cURL 命令,可以运行以下命令: ```bash curl -X POST -H "Content-Type: application/json" -d '{"name":"World"}' http://localhost:8080/example ``` 这应该会返回以下响应: ``` Hello, World! ``` 希望这可以帮助您开始编写自己的 Spring Boot HTTP 服务!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值