Requests03--POST方法


requests.post方法

requests.post作用

實現使用post方法發送http請求,用於向服務器提交資源

requests.post的場合

根據接口需求確定使用post方法還是其它方法
登陸一般使用post因為安全,get也能但是不安全
訪問某某主頁使用GET
最簡單的判斷根據需求來判斷接口請求方式

requests.post的語法形式

requests.post(url,data,json,allow_redirects,headers,auth,cookies)
參數url必須寫,其它的根據實際情況選擇是否要使用

requests.post的返回值

返回response對象
經常使用此對象的屬性status_code獲得響應嗎,使用此對象的text屬性獲得響應正文

post發送數據的類型

1)表單類型:application/x-www-form-urlencoded,默認使用的類型,這種類型會把參數變成a=1&b=2的形式
2)json類型:application/json,發送json字符串
3)data和json不能同時使用,具體類型看需求
4)multipart/form-data類型:一般用於上傳文件,比如銀行辦理業務時,需要客戶出示身份證件,銀行工作人員會通過接口上傳資料文件
5)xml類型(目前處於淘汰基本無用)
6)發送數據的類型以后開發人員確定,測試時看需求

requests.post(url, data)

1)模擬http的post方法發送數據,發送的數據存在請求體中
2)data表示以form表單形式發送數據,默認格式
3)data必須是字典格式:{'鍵':'值'}
4)data提交的數據不放在url鏈接里,而是放在請求正文中
params參數的數據一般放在url鏈接中
<1>查看實際請求的url:res.url
<2>查看請求體:res.request.body
查看請求頭:res.request.headers
content-type:application/x-www-form-urlencoded,意思是post以form表單形式發送的數據

post數據到發布會登陸接口

"""
接口需求
    接口地址:http://192.168.139.129:8000/login_action/
    方法:post
    參數:username,password
    數據庫表:guest.auth_user
    返回值:json類型
    登錄成功的響應文本:<!--發布會表單-->
    賬號或密碼錯誤的返回:username or password error!
    數據庫 guest
    use guest;
    數據表 auth_user;
    select * from auth_user;
    select username,password from auth_user;
    密碼加密 原密碼admin123456  如果工作問開發 , 加密密碼無法破解
"""
import requests
url = 'http://192.168.139.129:8000/login_action/'
data = {'username':'admin','password':'admin123456'}
r = requests.post(url,data)
print(r.text)
# text/html格式的響應類型 如果結果中有<html>那就是text/html格式
# print(r.json())# 對於text/html類型的響應,不能使用此方法看響應

post發送表單數據

'''
post發送表單數據,查看響應正文、實際請求的url、請求頭、請求體
接口地址:http://IP/apitest/login/
請求方法:post
參數:username、password
數據庫表:apitest.users
響應類型:text/html
預期包含文本:用戶**登錄成功
'''
import requests #1、導入requests
url='http://192.168.139.129/apitest/login/'#2、指定接口地址
args={'username':'admin', 'password':'123456'} #3、指定參數
res=requests.post(url,args) #4、發送請求,獲得響應結果
print(res.text) #5、查看響應結果
# print(res.request.url) #實際請求的url
# print(res.request.headers) #請求頭,User-Agent表示客戶端信息,Content-Type表示發送數據的類型,application/x-www-form-urlencoded表示表單類型
print(res.request.body) #請求體,username=admin&password=123456就是表單類型形式
#對比get
url='http://192.168.139.129/apitest/multi-params/'
args={'id':1,'username':'dumb'}
res=requests.get(url,args)
# print(res.text)
# print(res.request.url) #get方法的參數或數據在url之后
# print(res.request.headers) #get沒有發送數據的類型
print(res.request.body) #get的請求體為空

添加發布會接口

"""
接口需求:添加發布會接口
    接口地址:http://192.168.139.129:8000/sign/add_event/
    方法:post
    參數:
        eid:發布會id,數據庫中叫id,接口參數叫eid
        name:發布會名稱
        limit:限制參加人數
        status:狀態
        address:發布會地址
        start_time:發布會開始時間
    數據庫表: guest.sign_event
    返回值:json類型
        發布會添加成功:{'status':200,'message':'add event success'}
        參數為空或不全:{'status':10021,'message':'parameter error'}
        發布會id已存在:{'status':10022,'message':'event id already exists'}
        發布會名稱已存在:{'status':10023,'message':'event name already exists'}
        日期格式錯誤("年-月-日"格式合法,數據庫自動填充時間):{'status':10024,'message':'start_time format error. It must be in YYYY-MM-DD HH:MM:SS format.'}
"""
import requests

url = "http://192.168.139.129:8000/sign/add_event/"
data1 = {
    'eid': 10,
    'name': 'tsd2010班級班會',
    'limit': 200,
    'status': 1,
    'address': '北京市朝陽區',
    'start_time': '2021-2-9 13:10:00'
}
data2 = {
    'eid': "1",
    'name': '2010班級班會',
    'limit': 200,
    'status': 1,
    'address': '北京市朝陽區',
    'start_time': '2021-2-9 13:10:00'
}
data3 = {
    'eid': "",
    'name': '',
    'limit': 200,
    'status': 1,
    'address': '北京市朝陽區',
    'start_time': '2021-2-9 13:10:00'
}
data4 = {
    'eid': "11",
    'name': 'tsd2010班級班會',
    'limit': 200,
    'status': 1,
    'address': '北京市朝陽區',
    'start_time': '2021-2-9 13:10:00'
}
data5 = {
    'eid': "12",
    'name': 'tsd2010班級',
    'limit': 200,
    'status': 1,
    'address': '北京市朝陽區',
    'start_time': '2021-32-1 13:10:00'
}
r1 = requests.post(url,data1)
r2 = requests.post(url,data1)
r3 = requests.post(url,data1)
r4 = requests.post(url,data1)
r5 = requests.post(url,data1)
# {'鍵':'值'}格式一般是json格式
print(r1.json())
print(r2.json())
print(r3.json())
print(r4.json())
print(r5.json())
print(r1.text)
print(type(r1.json()))
print(type(r1.text))

post方式提交數據到登陸接口

"""
接口需求:
    接口描述:以post方式提交數據到登陸接口
    目的:使用post方法向http://192.168.139.129/apitest/ui-login/login.php發送數據
    接口地址:http://192.168.139.129/apitest/ui-login/login.php
    方法:post
    參數:username,password
    數據庫表:apitest.users
    返回值:text/html類型
        登陸成功的返回:用戶<u><b><font color=red>admin</font></b></u>登陸成功!
        賬號或密碼錯誤的返回:用戶名或密碼錯誤!
    寫法:requests.post(url,data)
    只能使用r.text查看響應結果,不可以使用r.json()
"""
import requests
url = "http://192.168.139.129/apitest/ui-login/login.php"
data = {"username":"Dumb","password":"Dumb"}
r = requests.post(url,data=data)#正確寫法
r = requests.post(url,data)#正確寫法
r = requests.post(url,json=data)#錯誤展示
print(r.text)

post發送數據給exam接口

"""post發送數據給exam接口,測試用戶名被占用的情況,查看響應正文、請求頭、請求體
接口地址:http://服務器IP/exam/signup/
功能:注冊用戶接口
方法:post
post數據類型:form表單
參數:username(要求用戶名不能重復)、password、confirm、name
數據庫表:exam.user
響應類型:json類型
預期包含文本:用戶名已被占用
"""
import requests
url='http://192.168.237.129/exam/signup/'
args={'username':'admin','password':'123456','confirm':'123456','name':'管理員'}
res=requests.post(url,args)
print(res.json())
print(res.request.headers)
print(res.request.body)

post發送數據給exam接口

'''post發送數據給exam接口,測試用戶名被占用的情況,查看響應正文、請求頭、請求體
接口地址:http://服務器IP/exam/signup/
功能:注冊用戶接口
方法:post
post數據類型:form表單
參數:username(要求用戶名不能重復)、password、confirm、name
數據庫表:exam.user
響應類型:json類型
預期包含文本:用戶名已被占用'''
import requests
url='http://192.168.237.129/exam/signup/'
args={'username':'admin','password':'123456','confirm':'123456','name':'管理員'}
res=requests.post(url,args)
print(res.json())
print(res.request.headers)
print(res.request.body)

requests.post(url, json)

1)json表示發送json類型的數據(發送json字符串)
2)json字符串會被轉為二進制/字節形式發送
①對比x-www-form-urlencoded/表單形式發送的數據形如
username=admin&password=12345&confirm=12345
3)發送json數據時,json=不能省略
4)發送json數據還是表單數據,看需求
5)json可以修改為data方式
①import json
②data=json.dumps(字典)
表示將字典轉為json字符串(序列化),注意不能用str轉字符串
③轉為data方式后,請求頭中的內容類型(Content-Type)可能會丟失

④此時的請求體是json字符串格式
6)一般data和json不同時使用

post發送json數據給接口

"""post發送json數據給接口
地址:http://httpbin.org/post
參數:uname、upass、isLogined
方法:post
發送數據的類型(參數類型):json字符串
返回值:json類型
  "json":{上面寫的參數字典}的形式"""
import requests
url='http://httpbin.org/post'
args={'uname':'admin','upass':'123456','isLogined':True}
#錯誤寫法
res=requests.post(url,args) #預期結果錯誤,相當於data=args
# print(res.text)
# print(res.request.headers) #'Content-Type': 'application/x-www-form-urlencoded'
#寫法1
# print(res.request.body)
res=requests.post(url,json=args)
# print(res.text)
# print(res.request.headers) #'Content-Type': 'application/json'
# print(res.request.body)
#寫法2
import json
res=requests.post(url,json.dumps(args)) #相當於data=json.dumps(args)
# print(res.text)
# print(res.request.headers) #請求類型丟失
print(res.request.body) #json字符串

post發送請求

'''post發送json數據,分別發送json、form類型數據,查看請求頭、請求體、響應正文
地址:.../apitest/send-json/
功能:對json中的鍵升序排列
方法:post
參數:name(字符串)、age(整數)、isMarried(True或False)、child(None)
參數類型:json類型
返回值:json類型'''
import requests
url='http://192.168.237.129/apitest/send-json/'
args={'name':'張三','age':23,'isMarried':True,'child':None}
# res=requests.post(url,args) #錯,請求的數據類型(省略=,相當於data,表單類型)錯
#寫法1
res=requests.post(url,json=args)
# print(res.text) #text什么地方都可以用,常用於text/html等類型的響應類型,json中的中文默認顯示為unicode字符
print(res.json()) #json常用於而且僅用於json類型的響應結果
#寫法2
import json
res=requests.post(url,json.dumps(args))
print(res.json())

requests.post(url, files)

1)files用於指定上傳的1個或多個文件,文件會被上傳到服務器

2)files是字典格式

3)files=不能省略

4)形式

files={‘參數名1’: open(‘文件名1’, ‘rb’), ‘參數名2’: open(‘文件名2’, ‘rb’) }

①open表示打開文件,rb表示以二進制形式打開文件用於讀

②open和rb均不能省略

③文件名要有擴展名

'''post發送json數據給接口
地址:http://httpbin.org/post
參數:uname、upass、isLogined
方法:post
發送數據的類型(參數類型):json字符串
返回值:json類型
  "json":{上面寫的參數字典}的形式'''
import requests
url='http://httpbin.org/post'
args={'uname':'admin','upass':'123456','isLogined':True}
#錯誤寫法
res=requests.post(url,args) #預期結果錯誤,相當於data=args
# print(res.text)
# print(res.request.headers) #'Content-Type': 'application/x-www-form-urlencoded'
#寫法1
# print(res.request.body)
res=requests.post(url,json=args)
# print(res.text)
# print(res.request.headers) #'Content-Type': 'application/json'
# print(res.request.body)
#寫法2
import json
res=requests.post(url,json.dumps(args)) #相當於data=json.dumps(args)
# print(res.text)
# print(res.request.headers) #請求類型丟失
print(res.request.body) #json字符串

Post發送請求上傳多個文件

'''post上傳多個文件,查看請求頭、請求體、響應正文
地址:.../apitest/upload-file/upfiles/
方法:post
參數:名稱自定義
返回值:text/html類型,預期包含文本“上傳成功”'''
import requests
url='http://192.168.237.129/apitest/upload-file/upfiles/'
args={'file1':open('demo07.py','rb'),
      'file2':open('C:\\Users/tedu/Desktop/aaa.png','rb')}
res=requests.post(url,files=args)
# print(res.text)
print(res.request.headers)
print(res.request.body)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM