知行编程网知行编程网  2022-08-29 13:00 知行编程网 隐藏边栏  24 
文章评分 0 次,平均分 0.0
导语: 本文主要介绍了关于python pos是什么的相关知识,包括python爬虫是什么,以及python insert这些编程知识,希望对大家有参考作用。

什么是python pos

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


一、post请求主体详解

一个普通的post请求主要包括请求行、请求头和请求体。

对于
来说没有请求主体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来构造。有必要简单了解一下HttpClient的HttpEntity对象,因为所有的post请求数据都需要放在HttpEntity实体中进行发送。 HttpEntity 是一个接口。有许多特定的类实现了这个接口。比较常用的是StringEntity、UrlEncodedFormEntity(继承自StringEntity)和MultipartEntity。它们将在以不同格式发送帖子请求时使用。接下来详细介绍每种数据格式对应的fiddler请求模拟和Requests请求模拟(Python实现)的实现。


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

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

This is the default content type. Forms submitted with this content type must be encoded as follows:Control names and 
values are escaped. Space characters are replaced by '+', and then reserved characters are escaped as described in 
[RFC1738], section 2.2: Non-alphanumeric characters are replaced by '%HH', a percent sign and two hexadecimal digits 
representing the ASCII code of the character. Line breaks are represented as "CR LF" pairs (i.e., '%0D%0A').The control
names/values are listed in the order they appear in the document. The name is separated from the value by '=' and 
name/value pairs are separated from each other by '&'.

这是发布请求最常见和默认的数据提交格式。它需要数据名称(name)和数据值(value)之间的等号,以及另一组名称/值值之间的 & 连接。例如:参数1=12345&参数2=23456。请求的内容已格式化。实际上,这种方法简化了客户端发送,也简化了服务器端获取。服务端可以通过getParameters(String name)获取传递过来的信息。这是最常见的post提交数据的方式,以表单的形式提交数据。

(1)如果请求是用fiddler模​​拟的,那么请求头和请求体的内容可以构造如下:

什么是python pos

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

什么是python pos

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

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

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


四、application/json数据格式

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

(1)如果请求是用fiddler模​​拟的,那么请求头和请求体的内容可以构造如下:

什么是python pos

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

什么是python pos

(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-urlencoded的请求头格式和application/json的主要区别在于请求体的构造格式(前者是key-value对,后者是JSON字符串),前者直接用字典传入,后者可以用json.dumps()函数转换成JSON字符串。


五、text/xml数据格式

(1)如果请求是用fiddler模​​拟的,那么请求头和请求体的内容可以构造如下:

什么是python pos

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

什么是python pos

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

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

或者把xml作为一个文件来传输:

import requests
def request_ws(request):
with open(archivo_request,"r") as archivo:
    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...

什么是python pos

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

什么是python pos

这是fiddler根据我们上传的文件自动调整产生的请求。在请求头中可以看到,我们需要选择一条数据作为“边界属性”。这种“边界数据”不能出现在内容的其他地方。一般来说,假设使用概率上“几乎不可能”的数据。每个帖子浏览器都会生成一个长度为 30-40 位的随机字符串。浏览器一般不会遍历这个帖子的所有数据来查找数据中不能出现的字符串。一般是随机生成的。选择这个边界后,浏览器在Content-Type中传递给服务器,服务器根据这个边界解析数据。下面的数据按边界划分为段,每段为一个数据项。 (每个字段被分成小部分,并包含一个“Content-Disposition”头,其值为“form-data”;一个“name”属性对应字段ID等,包括文件的文件名)模拟后request ,我们可以从返回的结果中看到我们的请求数据:

什么是python pos

(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)

综上所述,fiddler和requests在接口测试中模拟了post接口的四种请求数据构造方法。综上所述,在以后的接口测试工作组过程中及时咨询是有好处的。

同时Requests库还可以处理Multipart-Encoded文件,比如xls文件,甚至可以重写content-Type header。

比如:

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电脑。)

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写
扫一扫二维码分享