1.前言
Python內置的urllib模塊,也可以用於訪問網絡資源。但是,它用起來比較麻煩,而且,缺少很多實用的高級功能。因此我們使用 requests 模塊進行進行接口測試。
requests官方文檔資料地址:http://cn.python-requests.org/zh_CN/latest/
2.環境安裝
cmd(win+R快捷鍵)輸入:
pip install requests -i https://pypi.douban.com/simple
提示以下信息表示安裝成功。

3.requests發送請求
3.1 get請求無參數param
-
將安裝好的requests模塊導入后,通過GET訪問一個URL地址的網頁頁面,如:http://www.cnblogs.com/wwho
-
這里的 r 也就是 response,請求后的返回值,可以調用 response 里的 status_code 方法查看狀態碼
-
狀態碼 200 只能說明接口請求發送成功了,並不能說明功能一定是 OK 的,一般要查看響應的內容,r.text 是返回文本信息
# -*- coding:utf-8 -*-
# 導入 requests 模塊
import requests
# 定義 url
url = 'http://www.cnblogs.com/wwho'
# 請求博客園
r = requests.get(url=url)
# 打印狀態碼
print(r.status_code)
# 打印文本
print(r.text)
3.2 get請求有參數param
url地址為:http://apis.juhe.cn/simpleWeather/query?city=深圳&key=xxx
參數:city=深圳&key=xxx
可以以字典的形式傳參:
{"city": "深圳", "key": "xxx"}
多個參數格式:
{"key1": "value1", "key2": "value2", "key3": "value3"}
(r.url獲取當前url地址,可以檢查是否傳參成功)
代碼:
# -*- coding:utf-8 -*-
# 導入 requests 模塊
import requests
# 定義 url
url = 'http://apis.juhe.cn/simpleWeather/query'
par = {"city": "深圳",
"key": "4611a7abae4afe573fd7ca751d9d423a"}
result = requests.get(url=url, params=par)
# 打印文本
print(result.text)
3.3定制請求頭
一個完整的get請求,應該包括請求行(url) 和請求頭(headers)、請求參數(params),
什么時候要加請求頭呢,如果你不確定的話最好加上去。

3.4 response返回信息
response返回信息
-- r.status_code # 響應狀態碼
-- r.content # 字節方式的響應體,會自動為你解碼 gzip 和deflate 壓縮
-- r.headers # 以字典對象存儲服務器響應頭,但是這個字典比較特殊,字典鍵不區分大小寫,若鍵不存在則返回 None
-- r.json() # Requests 中內置的 JSON 解碼器,requests的方便之處還在於,對於特定類型的響應,例如JSON,可以直接獲取
-- r.url # 獲取 url
-- r.encoding # 編碼格式,requests自動檢測編碼
-- r.cookies # 獲取 cookie
-- r.raw # 返回原始響應體-- r.text #字符串方式的響應體,會自動根據響應頭部的字符編碼進行解碼
-- r.raise_for_status() # 失敗請求(非 200 響應)拋出異常
以上就是requests模塊主要的返回格式。
3.5 post請求
講post請求之前 先講一下 requests.session()
requests.session() 獲取 requests的session對象,簡單來說就相當於一個微型瀏覽器,能自動保持登錄態。所以一般對於 cookie – session 保持登錄態的系統就可以使用
requests.session()
使用方法:后續的請求都使用session即可

Post請求首先要注意的就是body的數據類型
常見的有四種類型,但是不止四種:
-
第一種:application/json: {“key1“:”value1”,“keyt2":“value2"}
-
第二種:application/x-www-form-urlencoded:name1= value1&name2=value2
-
第三種:multipart/form-data:這一種是表單格式的
(文件上傳,圖片上傳等混合式) -
第四種:text/xml
Body為x-www-form-urlencoded類型
怎么知道body是什么類型?
- 接口文檔有說明
- 自己抓包看
直接通過抓包就可以看出post請求的數據類型,如下圖就是x-www-form-urlencoded類型

傳data參數就行(無需轉json)

代碼:
# -*- coding:utf-8 -*-
# @File:sms.py
import requests
host = 'http://127.0.0.1:8002'
session = requests.session() # 相當於微型瀏覽器,保持登錄態
url = host + '/api/mgr/signin' # 定義url
body = {
"username": "byhy",
"password": "88888888"
}
resp = session.post(url=url, data=body)
status_code=resp.status_code #獲取響應狀態碼
print('響應狀態碼:{}'.format(status_code))
text=resp.text # 獲取響應內容,結果類型是字符串
print('響應內容:{}'.format(text))
json=resp.json() # 獲取響應內容,結果是字典類型
print('響應內容:{}'.format(json))
resp_headers=resp.headers # 獲取響應headers
print('響應header:{}'.format(resp_headers))
Body為json類型

json=body: 這個表示自動將python里面的字典,轉化為json格式參數了。關於字典和json的種種關系,后面專門寫篇文章講一下。

代碼:
# -*- coding:utf-8 -*-
import requests
host = 'http://127.0.0.1:8002'
session = requests.session() # 相當於微型瀏覽器,保持登錄態
url = host + '/api/mgr/signin' # 定義登錄的 url
body = {
"username": "byhy",
"password": "88888888"
}
resp = session.post(url=url, data=body) # 發送登錄請求
url_add_customer = host + '/api/mgr/customers' # 新建客戶的 url
body = {
"action":"add_customer",
"data":{
"name":"tester",
"phonenumber":"13345679934",
"address":"深圳市南山區"
}
}
resp = session.post(url=url_add_customer, json=body)
print(resp.text) # 打印響應文本
3.6 put請求
put 請求的接口做法跟 post請求的差不多的,只是把post 請求改為 put請求。一樣要看請求的格式。如果是 json 格式,也是用json接,Form格式用data接。
代碼:
# -*- coding:utf-8 -*-
# @Time:2021/4/16 9:54
# @File:sms.py
import requests
host = 'http://127.0.0.1:8002'
session = requests.session() # 相當於微型瀏覽器,保持登錄態
url = host + '/api/mgr/signin' # 定義登錄的 url
body = {
"username": "byhy",
"password": "88888888"
}
resp = session.post(url=url, data=body)
url_modify_customer = host + '/api/mgr/customers' # 修改客戶的 url
body = {
"action":"modify_customer",
"id": 52,
"newdata":{
"name":"深圳市橋北醫院",
"phonenumber":"13345678888",
"address":"深圳市中醫院"
}
}
resp = session.put(url=url_modify_customer, json=body)
print(resp.text) # 打印修改客戶接口響應的文本
3.7 delete請求
delete 請求的接口做法跟 post請求的差不多的,只是把post 請求改為 delete請求。一樣要看請求的格式。如果是 json 格式,也是用json接,Form格式用data接。

代碼:
# -*- coding:utf-8 -*-
# @Time:2021/4/16 9:54
# @File:sms.py
import requests
host = 'http://127.0.0.1:8002'
session = requests.session() # 相當於微型瀏覽器,保持登錄態
url = host + '/api/mgr/signin' # 定義登錄的 url
body = {
"username": "byhy",
"password": "88888888"
}
resp = session.post(url=url, data=body)
url_delete_customer = host + '/api/mgr/customers' # 刪除客戶的 url
body = {
"action":"del_customer",
"id": 52
}
resp = session.delete(url=url_delete_customer, json=body)
print(resp.text) # 打印刪除客戶接口響應的文本
總結:
requests庫的請求方法里參數眾多,所以簡單總結一下:
-
get請求帶參數就用params=params
-
post請求是form格式就用data=data
-
post請求是json類型參數就用json=json
-
請求頭信息header就用headers=headers
