当前位置: 首页 > 图灵资讯 > 行业资讯> python pos是什么

python pos是什么

发布时间:2025-11-11 16:45:23

banner57(2).png

在接口测试中,接口通常是GET请求或POST请求。以下是对接口测试中常见的四种POST请求数据方法的详细解释:

一、post请求主体详细说明

正常的post请求主要包括请求行、请求头、请求主体。

对于get请求,主体entity没有请求-body。对于post请求,发送请求的数据格式不会受到限制。理论上,你可以发送任何数据,但服务器能否处理是另一件事。服务器收到数据后如何分析数据?它将用请求头中的content-type设置的内容进行数据分析。确定content-type格式后,确定请求主体的数据格式。

二、Content-Type有四种格式:

  1. application/x-www-form-urlencoded(这也是默认格式)

  2. application/json

  3. text/xml

  4. multipart/form-data

这些不同的post请求数据格式应该通过Httpentity构建。有必要简单地整理一下Httpentity对象,因为所有的post请求数据都需要在Httpentity实体中发送。Httpentity是一个接口。实现这个接口的具体类别有很多。Stringentity更常用、UrlEncodedFormEntity(继承自StringEntity)、MultipartEntity。它们将用于发送不同格式的post请求。接下来,我们将详细介绍每个数据格式对应的fiddler请求模拟和requests请求模拟(python实现)的实现情况。

三、application/x-www-form-urlencoded数据格式

这种数据格式在W3C官网上明确定义:

Thisisthedefaultcontenttype.Formssubmittedwiththiscontenttypemustbeencodedasfollows:Controlnamesand
valuesareescaped.Spacecharactersarereplacedby'+',andthenreservedcharactersareescapedasdescribedin
[RFC1738],section2.2:Non-alphanumericcharactersarereplacedby'%HH',apercentsignandtwohexadecimaldigits
representingtheASCIIcodeofthecharacter.Linebreaksarerepresentedas"CRLF"pairs(i.e.,'%0D%0A').Thecontrol
names/valuesarelistedintheordertheyappearinthedocument.Thenameisseparatedfromthevalueby'='and
name/valuepairsareseparatedfromeachotherby'&'.

这是post请求中最常见和默认的数据提交格式。它要求数据名称(name)和数据值(value)用等号连接到另一组name/value值&例如,parameter1=12345&parameter2=23456。格式化要求的内容。事实上,这种方法简化了客户端发送和服务器端获取。服务器通过获取parameters(String name)可以获取传输的信息。以form表单的形式提交数据是post提交数据最常见的方式。

(1)如果用fiddler模拟请求,请求头和请求主体的内容可以这样构建:

模拟请求后,我们的请求数据可以从返回结果中查看:

(2)如果用Requests模拟post请求,请求可以这样构建:

datas={'parameter1':'12345','parameter2':'23456'}
r=requests.post('http://example.com',data=datas)
print(r.content)
print(r.status_code)

Requests支持以form表单的形式发送post请求,只需将请求的参数构成字典,然后传输给requests.post()data参数即可。

四、application/json数据格式

application请求头/json格式是指用来告诉服务器post过去的消息主体是序列化的 JSON 字符串。

(1)如果用fiddler模拟请求,请求头和请求主体的内容可以这样构建:

模拟请求后,我们可以从返回结果中看到请求数据:

(2)如果用Requests模拟post请求,请求可以这样构建:

url='http://www.example/post'
s=json.dumps({'key1':'value1','key2':'value2'})
r=requests.post(url,data=s)
print(r.text)

在这里,我们可以发现,当Requests模拟post请求时,请求头格式是application/x-www-form-urlencodedapplication/json的主要区别在于要求主体的结构格式(前者是键值对,后者是json串),前者直接用字典传入,后者用json.dumps()函数可以将字典转换为JSON串。

五、text/xml数据格式

(1)如果用fiddler模拟请求,请求头和请求主体的内容可以这样构建:

模拟请求后,我们可以从返回结果中看到请求数据:

(2)如果用Requests模拟post请求,请求可以这样构建:

xml="""myxml"""
headers={'Content-Type':'application/xml'}
requests.post('http://www.example.com',data=xml,headers=headers)

或将xml作为文件传输:

importrequests
defrequest_ws(request):
withopen(archivo_request,"r")asarchivo:
request_data=archivo.read()
target_url="http://127.0.0.1:8000/?wsdl"
headers={'Content-type':'text/xml'}
data_response=requests.post(target_url,data=request_data,headers=headers)

六、multipart/form-data数据格式

除了传统的application/x-www-form-Urlencoded表单,我们经常使用的另一种表单是用于上传文件的表单,它的类型是multipart/form-data。

(1)如果用fiddler模拟请求,请求头和请求主体的内容可以这样构建:

第一步是设置请求头格式,然后单击upload file...

第二步,上传你的文件,这里我上传一张png图片。

这是fiddler根据我们上传的文件自动调整生成的请求。从请求头可以看出,我们需要选择一段数据作为“分割边界”(boundary属性)。这种“边界数据”不能出现在内容的其他地方。一般来说,我们可以使用概率上“几乎不可能”的数据。每次post浏览器生成一个30-40位长的随机字符串,浏览器通常不会通过post的所有数据找到一个不可能出现在数据中的字符串,通常是随机生成的。在选择了这个边界后,浏览器将其放置在Contentent中-Type 它传输给服务器,服务器根据这个边界分析数据。根据boundary对下面的数据进行分段,每一段都是一个数据。(每个field分为小部分,包含一个value"form-data"的"Content-Disposition"头部;一个"name"属性对应fieldID等,文件包括filename)模拟请求后,从返回结果中可以看到我们的请求数据:

(2)如果用Requests模拟post请求,请求可以这样构建:

url='http://www.example.com'
files={'file':open('C://Users//Someone//Desktop//2.png','rb')}
r=requests.post(url,files=files)
print(r.text)

综上所述,是fidler和requests模拟post接口在接口测试中的四种要求数据的结构方法,有利于在以后的接口测试工作组过程中及时查阅。

同时,Requests库也可以处理多部分编码(Multipart-Encoded)例如xls文件,甚至Content-Type的报头也被改写。

比如:

url='http://httpbin.org/post'
files={'file':('report.xls',open('report.xls','rb'),'application/vnd.ms-excel',{'Expires':'0'})}
r=requests.post(url,files=files)

(推荐操作系统:windows7系统Python 3.9.1,DELL G3电脑。)

相关文章

python pos是什么

python pos是什么

2025-11-11
用python如何做自动化运维

用python如何做自动化运维

2025-11-11
人工智能为什么用python

人工智能为什么用python

2025-11-11
python fire是什么

python fire是什么

2025-11-11
python vim插件是什么

python vim插件是什么

2025-11-11
python vim模块有哪些函数接口

python vim模块有哪些函数接口

2025-11-11