您现在的位置是:亿华云 > IT科技

基础篇Python发送Post请求之根据参数位置传参、数据类型、不同方式传参

亿华云2025-10-04 04:07:30【IT科技】2人已围观

简介目录一、验证 SSL 证书 二、post 请求 1.断言 2.参数放在 body 里面的 post 请求 3.参数不放在 body 里面的 po

 

目录

一、基础验证 SSL 证书 二、发方式post 请求 1.断言 2.参数放在 body 里面的送P数据 post 请求 3.参数不放在 body 里面的 post 请求 4.到底哪些参数放在 Query String,哪些参数放在 body 里面呢?请求 5.如果两个地方同时都有,那么就可以同时传两个,根据一一对应就可以 三、参数传参传参Content-Type 的位置格式不同,就用不同的类型方式传参 1.写 post 请求要注意它的数据类型到底是哪种 2.不同的方式传参 3.json 格式的 post 请求

一、验证 SSL 证书

https 的不同请求相对于 http 安全级别高,需要验证 SSL 证书。基础

图片来自网络

https 的发方式请求,打开 fiddler 的送P数据时候,同时运行代码会报错,请求提示没有这个证书。根据可以忽略这个证书,参数传参传参加上verify=False就可以了。但是还是有警告,可以这样写:

import urllib3 urllib3.disable_warnings() 

来忽略警告。

靠谱链接:https://blog.csdn.net/qq_35304570/article/details/79826990

二、post 请求

1.断言

断言就是通常说的亿华云检查点。

断言和 if 的区别: 断言是当它不等于的时候,就抛出异常。等于的时候不抛出异常。if 语句就是打印出来,让你看下。

import requests import urllib3 urllib3.disable_warnings() url=http://japi.juhe.cn/qqevaluate/qq b={ "key":"1cb0de9717e554cef5f3539285b99726",       "qq":"169535"} r=requests.post(url,data=b) print(r.text) #转换成字典后,再去取值 reason=r.json()["reason"] print(reason) #实际结果 exp="success"#预期结果 #断言 # assert reason==exp if reason==exp:     print("测试通过") else:     print("测试失败") 

if 语句也可以抛出异常,例如换成raise NameError。

import requests import urllib3 urllib3.disable_warnings() url=http://japi.juhe.cn/qqevaluate/qq b={ "key":"1cb0de9717e554cef5f3539285b9972",       "qq":"169535"} r=requests.post(url,data=b) print(r.text) #转换成字典后,再去取值 reason=r.json()["reason"] print(reason) #实际结果 exp="success"#预期结果 #断言 # assert reason==exp if reason==exp:     print("测试通过") else:     raise NameError 

异常是想抛出就可以抛出,不想抛出就可以不抛出。

2.参数放在 body 里面的 post 请求

body 中的参数为键值对格式的。

图片来自网络

3.参数不放在 body 里面的 post 请求

post 请求的参数也可以放在 params 里面:

这个不是随便放的,如果接口文档没有规定参数放到请求体的话,你就可以放到 params 里面,也可以放到 body 里面。

图片来自网络

4.到底哪些参数放在 Query String,哪些参数放在 body 里面呢?

抓包,服务器托管如果看到接口的参数在url的?号后面,就用params去传,如果在头部的空一行下面,就用data去传。

5.如果两个地方同时都有,那么就可以同时传两个,一一对应就可以

图片来自网络,图片上的文字是小编编辑的

import requests import urllib3 urllib3.disable_warnings() url=http://japi.juhe.cn/qqevaluate/qq p={ "key":"1cb0de9717e554cef5f3539285b99726",       "qq":"169535"} body={      "xx":"xxx" } #Content-Type:application/x-www-form-urlencoded r=requests.post(url,params=p,data=body) print(r.text) #转换成字典后,再去取值 reason=r.json()["reason"] print(reason) #实际结果 exp="success"#预期结果 #断言 # assert reason==exp if reason==exp:     print("测试通过") else:     print("测试不通过") 

总结: post 请求参数有的在 url 里,有的在 body 里面,有的 url 和 body 里面都有。

什么时候发 get 请求,什么时候发 post 请求,这个是由开发文档来决定的。

三、Content-Type 的格式不同,就用不同的方式传参

1.写 post 请求要注意它的数据类型到底是哪种

常见的有四种,云服务器提供商并不是只有四种。

1.第一种是 application/json:{ “key1“:”value1”,“keyt2":“value2"}

json=

2.第二种是 application/x-www-form-urlencoded:name1= value1&name2=value2

data=

3.第三种是 multipart/form-data:这一种是表单格式的(文件上传 file=,图片上传等混合式)

data=

4.Content-Type:octets/stream(文件下载)

data=

5.text/xml

data=

2.不同的方式传参

图片来自网络

get 请求也是这种格式,主要是 post 请求需要去区分。

post 请求: 如果是application/x-www-form-urlencoded这种格式的参数,就用data=,如果是application/json这种格式的参数,就用json=。

划重点: 只有 Content-Type 它是application/json这种格式的参数,就用json=,其它的格式的参数都用data=。url 上面的参数还是用params=。

3.json 格式的 post 请求

头部声明下请求 body 的参数类型。

用 fiddler 发个请求:

代码可以这样写:

第一个参数传 url,这个位置不能随便变,后面的参数的位置是可以任意变的,只要指定了参数名称就可以了。

import requests url="http://www.example.com/" h={ "Content-Type":"application/json"} body={ "key":"1cb0de9717e554cef5f3539285b99726",       "qq":"169535"} #Content-Type:application/json  传json= r=requests.post(url,headers=h,json=body) print(r.text) 

使用 fiddler 的时候: ctrl+x 可以清空 fiddler 抓到的包。暂停点击 Capturing。

本文转载自微信公众号「清菡软件测试」,可以通过以下二维码关注。转载本文请联系清菡软件测试公众号。

很赞哦!(459)