在本教程中,我們將了解 Python requests
模塊,或者如何使用 Python 請求庫處理請求。requests
模塊是 Python 中發出 HTTP 請求的標準方式。我們還將討論請求的特徵。最後,我們將學習如何針對不同情況優化和定製這些功能。
本教程包括以下主題。
- 介紹
- Python
requests
模塊 - 獲取請求
- 開機自檢請求
- 狀態代碼
- JSON 回應
- 請求標題
- 消息正文
- 其他重要的 HTTP 方法
- 結論
讓我們了解一下請求庫的基本介紹。
介紹
一般來說,我們從網站上尋找一些信息。或者我們可能想進入社交媒體賬戶,查看郵件,觀看在線視頻。我們可能使用 web 瀏覽器發送請求,web 伺服器從 web 伺服器返回所需的結果。從網上獲取信息,需要通過網頁瀏覽器發送請求。
例如- 我們在谷歌上搜索 Python 教程。然後請求者向谷歌伺服器發送一個 HTTP 請求,伺服器返回帶有狀態碼的搜索結果。
啟動通信有兩個主要組件——客戶端和伺服器。我們使用超文本傳輸協議(HTTP),這使得客戶端和伺服器之間能夠通過互聯網進行通信。
Python 提供了requests
模塊,允許我們使用 Python 腳本發出這些請求。
Python requests
模塊
它是 Python 中最強大的工具,允許我們在網路上發送請求。它包括許多發送 HTTP 請求的特性和方法。發送請求的系統被稱為客戶端,持有 web 伺服器的系統被稱為伺服器。
在處理請求時,我們會遇到以下方法。
- GET – 用於向伺服器請求數據。
- POST – 用於向伺服器提交一些數據進行處理。
Python requests
模塊由許多簡單的 API 組成,有助於處理這些請求。這些 API 有許多功能,如添加標題、發送自定義標題、用網址傳遞參數等。
要開始處理請求,第一步是使用以下命令在 Python 中安裝requests
模塊。
pip install requests
或者
我們也可以使用 Pipenv (Python 打包工具)來安裝requests
模塊。鍵入以下命令。
pipenv install requests
導入文件中的 requests 模塊,檢查它是否安裝成功。
import requests
現在,我們準備開始學習 Python 請求的旅程。
獲取請求
GET 和 POST 方法決定了用戶在網頁上的操作。GET 是 Python requests
模塊中最通用的方法之一。它指定用戶正試圖從指定的資源中檢索數據。換句話說,它用於向一個網址發送請求。要調用 GET 請求,我們使用以下語法。
requests.get(url, param = {key:value}, args)
在上面的方法中, url *參數是用戶發送請求的特定網站的 url。 param 參數用於發送字典中的查詢字元串, 參數* 是多個命名參數之一。
當獲取請求成功發送後,該方法將返回一個請求。響應對象。此對象保存從伺服器收到的響應。我們可以在變數中分配 get()** 請求結果。
此對象保存從伺服器收到的響應。因此,我們可以將 get() 請求結果賦給一個變數。
發出獲取請求
使用requests
模塊發出 HTTP 請求是一種非常簡單的方法。下面是發出請求的代碼。
這裡,響應對象將存儲信息。以下是基本屬性。
- 內容- 返迴響應的數據內容。
- 狀態碼- 返回我們請求的狀態。例如- 200 OK 表示您成功請求,404 NOT FOUND 表示未找到資源。
- CookieJar-它用來獲取一個 CookieJar 對象,該對象擁有我們從伺服器獲得的所有 CookieJar。
示例-
import requests
req = requests.get('http://www.javatpoint.com/')
print(req.encoding) # returns 'utf-8'
print(req.status_code) # returns 200
print(req.elapsed) # returns datetime.timedelta(0, 1, 666890)
print(req.url) # returns 'https://edureka.co/'
print(req.history)
print(req.headers['Content-Type'])
輸出:
ISO-8859-1
200
0:00:01.007097
https://www.javatpoint.com/
[]
text/html;charset=ISO-8859-1
開機自檢請求
POST 方法用於使用 post() 方法發送信息。基本語法如下。
語法
requests.post(url,數據={key: value},json={key: value},args)
以下是重要的參數。
- url-URL 是一個強制參數,它指示我們想要向其發送一些數據的 URL。
- 數據- 它指定了我們要發送到 URL 的字典、文件對象或元組。這是一個可選參數。
- json – 這是要發送到 URL 的 json 對象。
開機自檢方法返回請求。響應對象。
狀態代碼
狀態代碼是我們在發出 get 或 POST 請求後得到的響應。狀態代碼通知我們請求的狀態。
有許多狀態代碼可用於響應。例如,當我們的請求成功時,狀態代碼將是 200 或 201,404 狀態代碼是錯誤的請求或我們正在尋找的頁面沒有找到。
我們也可以使用這些信息在我們的代碼中做出決定。
if response.status_code == 200:
print('Success!')
elif response.status_code == 404:
print('Not Found.')
如果狀態碼為 200,則列印成功,如果結果為 404,則程序列印未找到。
有一點永遠不要忘記,這種方法不會驗證狀態代碼是否等於 200。這是因為 200 到 400 範圍內的其他狀態代碼,如 204 NO CONTENT,在某種意義上也被認為是成功的。
例如-204 將指示請求成功,但是消息正文中沒有要返回的內容。
JSON 回應
JSON 代表 JavaScript 對象符號,這是一種最流行的數據格式傳輸方式。網頁瀏覽器很容易讀取 JSON 數據。數據以字典形式(鍵、值對)存儲。
如何將 JSON 轉換成 Python 字典?
我們使用 r.json()方法從 json 響應中創建一個 Python 字典。讓我們看看下面的例子。
示例-
import requests
json_data = {'username':'mathew','password':'1234'}
r = requests.post('https://httpbin.org/post',data = json_data)
print(r.json())
輸出:
{'args': {}, 'data': '', 'files': {}, 'form': {'password': '1234', 'username': 'mathew'}, 'headers': {'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate', 'Content-Length': '29', 'Content-Type': 'application/x-www-form-urlencoded', 'Host': 'httpbin.org', 'User-Agent': 'python-requests/2.25.1', 'X-Amzn-Trace-Id': 'Root=1-60b711e8-60f535db7df2f6a61f710e29'}, 'json': None, 'origin': '132.154.100.245', 'url': 'https://httpbin.org/post'}
存儲在變數中
JSON 數據可以轉換成 Python 字典,也可以存儲在變數中。讓我們理解下面的例子。
示例-
import requests
json_data = {'username':'mathew','password':'1234'}
r = requests.post('https://httpbin.org/post',data = json_data)
r_dictionary= r.json()
print(r_dictionary['form'])
輸出:
{'password': '1234', 'username': 'mathew'}
請求標題
我們可以使用 get() 方法創建一個自定義標題。使用 headers 參數在 get() 中傳遞 HTTP 頭的字典。
讓我們理解下面的例子。
示例-
import requests
response = requests.get(
'https://api.github.com/search/repositories',
params={'q': 'requests+language:python'},
headers={'Accept': 'application/vnd.github.v3.text-match+json'},
)
json_result = response.json()
repo = json_result['items'][0]
print(f'Text matches: {repo["text_matches"]}')
輸出:
Text matches: [{'object_url': 'https://api.github.com/repositories/4290214', 'object_type': 'Repository', 'property': 'description', 'fragment': 'Requests + Gevent = <3', 'matches': [{'text': 'Requests', 'indices': [0, 8]}]}]
解釋-
在上面的代碼中,accept頭是應用可以處理的內容類型。例如,我們使用了頭值應用/vnd.github.v3.text-match+json、專有的 GitHub Accept 頭。標題的內容是 JSON 格式的。
其他重要的 HTTP 方法
除了 GET 和 POST 方法之外,HTTP 中很少有基本的方法,包括 PUT、DELETE、HEAD、PATCH 和 OPTIONS。這些方法用於創建、讀取、更新和刪除(或 CRUD)操作。下面是 HTTP 方法的匯總表。
| HTTP 方法 | create, read, update, and delete | 整個集合 | 特定的物品 |
| 郵政 | 創造 | 它顯示了帶有鏈接客戶 id 的位置標題上的 201(已創建)。 | 如果資源已經存在,它顯示 404(未找到)。 |
| GETRead | 它顯示 200,客戶列表,分頁 | 404、如果標識未找到或無效。 |
| 放 | 更新 | 它顯示 405,除非我們想替換所有資源。 | 404、如果標識未找到或無效。 |
| 修補 | 更新 | 它顯示 405,除非我們想修改整個集合本身。 | 404、如果標識未找到或無效。 |
| 刪除 | 刪除 | 它顯示 405,除非我們想刪除整個集合。 | 404、如果標識未找到或無效。 |
消息正文
消息正文用於傳遞數據,而不是查詢字元串中的參數。這些數據通過 POST、PUT 和不太常見的補丁傳遞。數據可以是字典、元組列表、位元組或類似文件的對象。使用請求,您將把有效負載傳遞給相應函數的數據參數。
如果請求內容類型為application/x-www-form-URL encoded,數據將在字典中發送。
requests.post('https://httpbin.org/post', data={'key':'value'})
我們也可以使用元組列表發送相同的數據。
requests.post('https://httpbin.org/post', data=[('key', 'value')])
結論
我們已經討論了 Python requests
模塊的基本細節,這將非常有助於進行基本的伺服器請求。
要點是 get() 方法不如 post() 方法安全,因為請求只能通過 URL 傳遞。因此,敏感密碼可能被黑客攻破。
我們還提到了重要的 HTTP 方法,以及我們如何使用自定義頭髮送請求。如果您想了解requests
模塊的更多信息,您可以訪問其編寫良好的 請求文檔 。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/255129.html