疑問:若接口返回的數據經過加密或格式發生改變,如何處理
進行一層封裝,顯示轉換
- 將獲得的數據進一步判斷數據格式,根據條件進行轉換。如以下demo
class TestEncode:
def test_api(self):
req = ApiRequest()
req_data = {
"schema": "http",
"encoding": "base64", # 這個字段根據數據格式而定
"method": "get",
"url": "http://1.1.1.1/topics.txt",
"headers": None
}
r = req.send(req_data) # 將數據發送到已封裝的函數,返回一個json格式的數據
assert len(r["topics"]) == 2
class ApiRequest:
"""對數據進行相應的封裝,進行格式轉換"""
def send(self, data: dict):
if data["schema"] == "http":
res = requests.request(data["method"], data["url"], headers=data["headers"])
if data["encoding"] == "base64": # 判斷數據的編碼格式
# 使用base64進行解密,將解密后的數據轉換成json結構體的數據
return json.loads(base64.b64decode(res.content))
else:
return json.loads(res.content) # 若數據格式不是base64,將原生內容進行json格式化
elif data["schema"] == "dubbo":
pass
elif data["schema"] == "websocket":
pass
else:
pass
- 修改requests 加入hook,隱式轉換數據。修改底層庫的方法將數據轉換
- 若是以base64進行加密,則可以使用base64.b64decode(keyword)函數進行解密后,在轉換為json格式或其他格式。
- 若是不知道加密的算法,可與開發商討,給定一個接口,向接口請求數據,返回所要的具有相應格式的數據
- 加解密不要體現在測試用例中
加密方法
- 請求加密:摘要加密 把原文或者原始請求中的部分字段做摘要算法的加密,把加密后的結果也放到原始請求中發送。
- 響應加密:返回的整個響應或者響應中的部分字段被加密,我們需要找到解密辦法,還有一個名字叫摘要算法。
解密方式
- 自己解決通用解密算法
- 需要研發提供加解密的lib
- 需要加密方提供遠程解析服務,這樣算法仍然是保密的。
加密與簽名的區別
- 加密通常代表是對稱加密,這種加密是可以解密的。比如base64,主要用於的數據傳輸。
- 簽名通常代表是非對稱加密,這種加密不可逆不可解密。比如rsa、md5。通常用於認證內容未被篡改。