python+pytest介面自動化(4)-requests傳送get請求

給你一頁白紙發表於2022-03-07

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)

引數說明:

  1. url,即介面地址
  2. params,介面引數,可選(即可填可不填)
  3. **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.textres.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的響應內容。

相關文章