參考鏈接:https://developer.51cto.com/art/202102/645705.htm
請求參數(shù):
params = {
"a": 0,
"b": "hello"
}
- 請求參數(shù)的值 格式是 JsonList
解決方案:將參數(shù)處理下:json.dumps()
params = {
"a": 0,
"b": "hello",
"c": json.dumps([{"a":1,"b":"5.png"},{"a":2,"b":"8.png"}])
}
- 請求參數(shù)類型為列表 例如從excel取的類型是字符串 需要將字符串列表轉(zhuǎn)換為列表
解決方案:將參數(shù)處理下:json.loads()
params = {
"a": 0,
"b": "hello",
"c": json.loads('["10004","10009"]')
}
- 請求值里面有雙引號 // 可以使用單引號
params = {
"a": 0,
"b": "hello",
"c": json.dumps([{"a":1,"b":"5.png"},{"a":2,"b":"8.png"}]),
"appNote": '<img src="http://img.a.com/pc07.png" alt=""/>'
}
- request 安全證書
解決方案:verify=False
requests.post(url, params=params, verify=False)
- 警告
解決方案:增加信息
import urllib3
urllib3.disable_warnings()
- 參數(shù)放在 body 里面的 post 請求 data=
requests.post(url, data=params)
- 參數(shù)不放在 body 里面的 post 請求 放在QueryString params=
requests.post(url, params=params)
- 如果兩個地方同時都有,那么就可以同時傳兩個燕差,一一對應(yīng)就可以
params = {
"a": 0,
"b": "hello"
}
body = {
"c":10,
"d":"hi"
}
requests.post(url,params=params,data=body)
- 沒有登錄 增加cookie
cookies = get_cookie()
requests.post(url, data=params, cookies=cookies)
// 示例寫固定路徑 項目可用相對路徑摘盆,文件名參數(shù)化
def get_cookie():
txt_file = r"D:\python\data\cookies.txt"
f=open(txt_file,'r')#打開所保存的cookies內(nèi)容文件
cookies={}#初始化cookies字典變量
for line in f.read().split(';'): #按照字符:進(jìn)行劃分讀取
#其設(shè)置為1就會把字符串拆分成2份
name,value=line.strip().split('=',1)
cookies[name]=value #為字典cookies添加內(nèi)容
return cookies
post 請求要注意它的數(shù)據(jù)類型到底是哪種
- 常見的有四種,并不是只有四種 application/json 是 json= 其他都是 data=
1.第一種是 application/json:{“key1“:”value1”,“keyt2":“value2"}
2.第二種是 application/x-www-form-urlencoded:name1= value1&name2=value2
3.第三種是 multipart/form-data:這一種是表單格式的(文件上傳 file=而姐,圖片上傳等混合式)
4.Content-Type:octets/stream(文件下載)
5.text/xml - 一般格式的請求頭
headers = {
'user-agent': ***, //有代理限制的時候加上
'Accept': 'application/json', // 有限制的時候加上
'Content-Type': 'application/x-www-form-urlencoded',
}
requests.post(url, data=params, headers=headers)
- json格式的 請求頭
headers = {
'Content-Type':'application/json'
}
requests.post(url, json=params, headers=headers)
// 或者
requests.post(url, data=json.dumps(params), headers=headers)
- 返回 302 重定向
r = requests.post(url, json=params,headers=headers,cookies=cookies,allow_redirects=False)
- 打印輸入輸出信息 返回格式中文輸出亂碼
log.info("請求信息:" + str(json.dumps(result['req'],ensure_ascii=False)))
- 打印輸入輸出信息 json格式轉(zhuǎn)換
log.info("請求信息:" + str(json.dumps(result['req'],cls=NpEncoder)))
import json
import numpy as np
class NpEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, np.integer):
return int(obj)
elif isinstance(obj, np.floating):
return float(obj)
elif isinstance(obj, np.ndarray):
return obj.tolist()
else:
return super(NpEncoder, self).default(obj)
delect 一個實例
- params放在QueryString的參數(shù)
- body_data body里的數(shù)據(jù) 可為list 字典都支持
params = {
"a": 0,
"b": "hello"
}
body_data = ["hello","world"] # 可為list,字典都行
headers = {
'content-type': 'application/json'
}
cookies = get_cookie(file_name='cookies.txt')
#接口請求
r = requests.delete(url,params = params,json=json.dumps(body_data),headers=headers,cookies=cookies)
文件上傳 一個實例 帶參數(shù)和圖片上傳
img_name = 'tu.jpeg' #文件名稱
file_path = r'd:\img\tu.jpeg' # 文件路徑 建議用相對路徑
file = open(file_path,"rb") # 文件 也可使用 with open * as file file.read()調(diào)用
img_type = 'image/jpeg' # 文件類型
# 除了文件以外其他參數(shù)
data = {
"a": 1,
"b": "bbb"
}
files = {
"c" : (img_name,file,img_type)
}
r = requests.post(url, data=data,files=files,headers=headers,cookies=cookies)