python中用於請求http接口的有自帶的urllib
和第三方庫requests
,但 urllib 寫法稍微有點繁瑣,所以在進行接口自動化測試過程中,一般使用更為簡潔且功能強大的 requests 庫。下面我們使用 requests 庫發送get請求。
requests庫
簡介
requests 庫中提供對用的方法用於常用的HTTP請求,對應如下:
requests.get() # 用於GET請求
requests.post() # 用於POST請求
requests.put() # 用於PUT請求
requests.delete() # 用於DELETE請求
當然還有更多的方法,這里只列舉常用的。
安裝
安裝命令:pip install requests
發送get請求
get請求參數格式說明
requests 中的 get 方法源碼如下:
def get(url, params=None, **kwargs):
r"""Sends a GET request.
:param url: URL for the new :class:`Request` object.
:param params: (optional) Dictionary, list of tuples or bytes to send
in the query string for the :class:`Request`.
:param \*\*kwargs: Optional arguments that ``request`` takes.
:return: :class:`Response <Response>` object
:rtype: requests.Response
"""
kwargs.setdefault('allow_redirects', True)
return request('get', url, params=params, **kwargs)
參數說明:
- url,即接口地址
- params,接口參數,可選(即可填可不填)
- **kwargs,可以添加其他請求參數,如設置請求頭headers、超時時間timeout、cookies等
不帶參數請求
import requests
res = requests.get(url="https://www.cnblogs.com/lfr0123/")
# 請求得到的res是一個Response對象,如果想要看到返回的文本內容,需要使用.text
print(res.text)
帶參數請求
import requests
url = "http://www.baidu.com/s"
params = {"wd": "給你一頁白紙-博客園", "ie": "utf-8"}
res = requests.get(url=url, params=params)
print(res.text)
加入請求頭headers
有些接口限制只能被瀏覽器訪問,這時按照上面的代碼去請求就會被禁止,我們可以在代碼中加入 headers 參數偽裝成瀏覽器進行接口請求,示例如下:
import requests
url = "http://www.baidu.com/s"
params = {"wd": "給你一頁白紙-博客園", "ie": "utf-8"}
# User-Agent的值為瀏覽器類型
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.82 Safari/537.36"
}
res = requests.get(url=url, params=params, headers=headers)
print(res.text)
部分結果如下:
這里的響應體其實就是在百度中搜索給你一頁白紙-博客園
的結果頁面。
除此之外,還可以加入timeout、cookies等,寫法如下:
# timeout只限制請求的超時時間,單位為s,若超時則報錯
res = requests.get(url=url, params=params, headers=headers, timeout=20, cookies=cookies)
響應內容
發送請求后會獲取到接口響應的內容,如上面示例中res.text,其他響應內容獲取方式如下:
res.status_code # 響應狀態碼
res.headers # 響應頭
res.encoding # 響應體編碼格式
res.text # 響應體,字符串形式的文本信息
res.content # 響應體,二進制形式的文本信息,會自動解碼
res.cookies # 響應的cookie
res.json() # 響應體格式為json,則需要通過json()進行解碼
這里需要注意,res.text
與res.content
的使用,具體使用哪種方式獲取響應體內容,需要根據編碼方式進行選擇,最笨的方法就是一種不行換另一種試試。
示例如下:
import requests
url = "http://www.baidu.com/s"
params = {"wd": "給你一頁白紙-博客園", "ie": "utf-8"}
# User-Agent的值為瀏覽器類型
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.82 Safari/537.36"
}
res = requests.get(url=url, params=params, headers=headers)
print(res.text)
print(res.status_code)
print(res.headers)
print(res.encoding)
print(res.cookies)
結果如下:
結果中由上而下依次對應代碼中print的響應內容。