Python 接口自動化 - requests框架


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

  1. 將安裝好的requests模塊導入后,通過GET訪問一個URL地址的網頁頁面,如:http://www.cnblogs.com/wwho

  2. 這里的 r 也就是 response,請求后的返回值,可以調用 response 里的 status_code 方法查看狀態碼

  3. 狀態碼 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的數據類型
常見的有四種類型,但是不止四種:

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

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

  3. 第三種:multipart/form-data:這一種是表單格式的
    (文件上傳,圖片上傳等混合式)

  4. 第四種:text/xml

examples.getStateName

Body為x-www-form-urlencoded類型

怎么知道body是什么類型?

  1. 接口文檔有說明
  2. 自己抓包看

直接通過抓包就可以看出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庫的請求方法里參數眾多,所以簡單總結一下:

  1. get請求帶參數就用params=params

  2. post請求是form格式就用data=data

  3. post請求是json類型參數就用json=json

  4. 請求頭信息header就用headers=headers


免責聲明!

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



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