讓 HTTP 服務人類——Python Requests 模塊基本用法總結

讓 HTTP 服務人類——Python Requests 模塊基本用法總結

Requests是一個基於Apache2 Licensed 協議開源的Python HTTP庫,使得Python輕鬆的向網站請求信息以及檢查返回的響應。

Requests 繼承了urllib2的所有特性,支持HTTP連接保持和連接池,支持使用Cookie保持會話,支持文件上傳,支持自動確定響應內容的編碼,支持國際化的 URL 和 POST 數據自動編碼。

本文主要介紹Python Requests的一些簡單基本用法,高級特性將在後續文章中介紹。

若對您所有幫助,歡迎通過文章頂部“生機大會”活動頁面,投票支持哦。


安裝 Requests

我們在Windows 10,Python3環境中,通過pip安裝requests模塊,如下 :

讓 HTTP 服務人類——Python Requests 模塊基本用法總結


發送請求

我們先看一下簡單的例子

讓 HTTP 服務人類——Python Requests 模塊基本用法總結

如上,發送一個完整的HTTP請求,只需要幾行代碼即可,簡潔而優雅。發送其它方式的請求也是如此簡潔,如下:

讓 HTTP 服務人類——Python Requests 模塊基本用法總結


向URL中傳遞參數

有時候我們需要在 url中傳遞參數,就像瀏覽頭條個人主頁一樣,url中就包含了mid=1615263538560013參數。我們可以自己拼接該URL,也可以使用 Requests提供的params參數實現參數的傳遞,如下:

讓 HTTP 服務人類——Python Requests 模塊基本用法總結

如上,我們可以看到打印的請求url是一個拼接後的包含{'user_name': 'Jack', 'mobile': 'Tony'} 參數的url。

在GET請求中,我們使用 params參數傳遞數據,在POST請求中我們使用 datajson參數傳遞數據。


獲取響應內容

獲取響應狀態碼

我們可以 response.status_code獲取每次請求的響應狀態,如下:

讓 HTTP 服務人類——Python Requests 模塊基本用法總結

如果 HTTP 請求返回了不成功的狀態碼, Response.raise_for_status方法會拋出一個 HTTPError異常,因此我們可以使用它直接來判斷請求是否成功。

讓 HTTP 服務人類——Python Requests 模塊基本用法總結


獲取字符串方式的響應體

response.text 會自動根據響應頭部的字符編碼進行解碼,如下:

讓 HTTP 服務人類——Python Requests 模塊基本用法總結


獲取字節方式的響應體

response.content 會自動為你解碼 gzip 和 deflate 壓縮,如下:

讓 HTTP 服務人類——Python Requests 模塊基本用法總結


Requests 中也有一個內置的 Json 解碼器,幫助我們處理 Json 響應內容,如下:

讓 HTTP 服務人類——Python Requests 模塊基本用法總結


獲取響應頭

我們可以通過 response.headers 方法以字典對象存儲服務器響應頭,如下:

讓 HTTP 服務人類——Python Requests 模塊基本用法總結


獲取網頁編碼

我們可以通過 response.encoding 獲取網頁編碼

讓 HTTP 服務人類——Python Requests 模塊基本用法總結

對 encoding修改後就直接會用修改後的編碼去獲取網頁內容。


設置請求超時時間

我們可以通過 timeout參數設置超時時間,一旦超過這個時間還沒獲得響應內容,就會拋出requests.exceptions.ConnectTimeout異常。

讓 HTTP 服務人類——Python Requests 模塊基本用法總結


POST請求方式

上面例子中,我們通過 GET請求方式介紹了 Requests基本的用法,在實際應用中除了GET請求方式,還有 POST請求方式也被廣泛的應用。POST請求方式的使用與 GET方式並沒有很大的區別,本質的區別在於它傳遞參數的方式並不像 GET方式一樣,通過在url中拼接字段來發送請求,POST請求方式採取了相對更為安全的操作方式,通過form表單的方式來發送請求。

HTTP協議中規定 POST提交的數據必須放在消息主體中,但是協議並沒有規定必須使用什麼編碼方式。服務端通過是根據請求頭中的 Content-Type字段來判斷請求中的消息主體是用何種方式進行編碼,然後消息主體進行解析。具體的編碼方式包括,包含以下幾種:


以表單形式提交數據(application/x-www-form-urlencoded

想要發送表單形式的數據,只需簡單的傳遞一個字典給data參數,在發送請求的時候,會自動編碼為表單的形式,例如:

讓 HTTP 服務人類——Python Requests 模塊基本用法總結


以Json形式提交數據(application/json

在很多情況下,想要發送的數據並非為表單形式,而是一個json格式的字符串,如果傳遞給data參數的內容不是一個Dict,而是一個String,那麼在發送的時候,數據會被直接發送出去,不會自動編碼為表單形式。

因此,想要在 POST請求中使用 data參數來傳遞 json格式的字符串,首先得把dict轉為string,通常我們使用 json.dumps 方法,例如:

讓 HTTP 服務人類——Python Requests 模塊基本用法總結

除了可以對 Dict編碼後以String的方式傳遞參數外,還可以使用 json參數直接傳遞,在傳遞時會自行進行編碼為string類型,如下:

讓 HTTP 服務人類——Python Requests 模塊基本用法總結


以multipart形式提交數據(multipart/form-data)

Requests也支持以multipart形式發送 POST請求,只需將一文件傳給 requests.post 的

files參數就可以實現文件提交,如下:

讓 HTTP 服務人類——Python Requests 模塊基本用法總結

我們也可以把字符串直接作為文件進行提交,如下:

讓 HTTP 服務人類——Python Requests 模塊基本用法總結



分享到:


相關文章: