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的響應內容。