在本教程中,我們將了解 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-hk/n/255129.html
微信掃一掃
支付寶掃一掃