在Python中,GET請求是最常見的一個HTTP請求方法。而在實現該方法時,使用`requests`模塊的`get()`函數是非常流行的選擇。在本篇文章中,我們將全面介紹`get()`函數及其各種不同用法,幫助您更好地了解和使用它。
一、發送簡單的GET請求
首先,我們來看一個最簡單的例子。向某個網站發送一個GET請求,獲取其返回的HTML頁面,然後列印出來。對於這個任務,無需傳遞任何參數即可實現。
import requests response = requests.get('http://httpbin.org/html') print(response.text)
這裡我們向http://httpbin.org/html發送GET請求,該網站會返回一個簡單的HTML頁面作為響應。使用`text`屬性可以獲取到響應的HTML內容。
理解`get()`函數的一個重要方面是了解其可選參數的作用。例如,可以使用`headers`參數向伺服器發送附加的頭信息,如`User-Agent`。這對於模擬不同的客戶端或操作系統非常有用。
import requests url = 'http://httpbin.org/user-agent' headers = {'User-Agent': 'Mozilla/5.0'} response = requests.get(url, headers=headers) print(response.json())
這裡我們設置了一個偽造的`User-Agent`頭,然後向http://httpbin.org/user-agent發送GET請求。該網站會返回一個JSON響應,其中包含了客戶端的詳細信息。使用`json()`方法可以將響應內容轉換為JSON格式的數據。
二、傳遞URL參數
發送GET請求時,我們通常需要將查詢字元串參數添加到URL後面。這些參數以`?`符號開頭,然後是類似`key=value`的形式來傳遞。可以使用`params`參數向`get()`函數傳遞這些參數。
import requests url = 'http://httpbin.org/get' params = {'key1': 'value1', 'key2': 'value2'} response = requests.get(url, params=params) print(response.url)
這裡我們向http://httpbin.org/get發送GET請求,並傳遞了兩個URL參數,即`key1`和`key2`。使用`url`屬性可以獲取到完整的URL,包含了傳遞的參數。
三、發送請求時超時處理
如果請求一個長時間不響應的伺服器,我們可能需要手動處理超時情況。`requests`模塊的`get()`函數提供了一個`timeout`參數,以便在連接請求超過指定秒數時引發一個異常。
import requests url = 'http://httpbin.org/delay/5' try: response = requests.get(url, timeout=2) print(response.text) except requests.exceptions.Timeout: print('Timeout occurred')
這裡我們向http://httpbin.org/delay/5發送GET請求,但設置了一個超時時間為2秒。由於響應需要5秒才能完成,因此會引發一個`Timeout`異常。在這種情況下,我們捕獲該異常並列印出錯誤信息。
四、處理請求的響應
`get()`函數返回一個`Response`對象,該對象包含響應的所有信息。在處理響應時,我們可以使用各種`Response`對象的屬性和方法。以下是一些常見的例子:
import requests url = 'http://httpbin.org/get' response = requests.get(url) # 獲取HTTP狀態碼 print(response.status_code) # 獲取響應頭部信息 print(response.headers) # 獲取響應內容(二進位數據) print(response.content) # 將響應內容解析為文本(Unicode)格式 print(response.text) # 將響應內容解析為JSON格式 print(response.json()) # 獲取響應時間(以秒為單位) print(response.elapsed.total_seconds())
五、使用代理伺服器
有時,訪問某些網站可能因為您所在的地址而被屏蔽了。在這種情況下,我們可以使用代理伺服器來發送請求,以改變我們的位置。
可以通過將`proxies`參數傳遞給`get()`函數來使用代理伺服器。將`proxies`設為一個字典,鍵為`http`和/或`https`,值為代理伺服器的URL。
import requests url = 'http://httpbin.org/ip' proxies = {'http': 'http://localhost:8080', 'https': 'https://localhost:8080'} response = requests.get(url, proxies=proxies) print(response.json())
這裡我們向http://httpbin.org/ip發送GET請求,並傳遞了一個代理伺服器URL。使用`json()`方法解析響應內容,可以看到我們使用代理伺服器的IP地址。
六、基本身份驗證
有時,我們需要向某些需要授權才能訪問的站點發送請求。在這種情況下,我們可以使用基本身份驗證。這種身份驗證方式會在HTTP頭部中發送用戶名和密碼的base64表示形式。
可以通過將`auth`參數傳遞給`get()`函數來實現基本身份驗證。將`auth`設為一個元組,第一個元素是用戶名,第二個元素是密碼。
import requests url = 'http://httpbin.org/basic-auth/user/passwd' auth = ('user', 'passwd') response = requests.get(url, auth=auth) print(response.text)
這裡我們向http://httpbin.org/basic-auth/user/passwd發送GET請求,並使用基本身份驗證。該網站需要用戶名`user`和密碼`passwd`才能訪問。使用`text`屬性獲取到響應內容。
七、自定義請求頭部
有時,我們需要向伺服器發送某些自定義的HTTP頭部,例如`Referer`、`Accept-Language`等。可以通過將`headers`參數傳遞給`get()`函數來實現這一點。
import requests url = 'http://httpbin.org/headers' headers = {'Referer': 'http://www.example.com'} response = requests.get(url, headers=headers) print(response.json())
這裡我們向http://httpbin.org/headers發送GET請求,並傳遞了一個自定義的`Referer`頭部。該網站會返回一個JSON響應,其中包含了我們發送的HTTP頭部信息。
八、使用會話對象
如果我們需要處理多個相關的請求,例如在同一會話中使用基本身份驗證或使用代理伺服器,可以使用`requests`模塊的會話對象。會話對象可以處理多個相關請求,並自動將cookie等信息保存在會話中。
可以使用`Session()`函數創建一個會話對象。
import requests session = requests.Session() url = 'http://httpbin.org/cookies/set/sessioncookie/123456789' session.get(url) response = session.get('http://httpbin.org/cookies') print(response.json())
這裡我們創建一個會話對象,然後發送兩個相關的請求。在第一個請求中,我們設置一個名為`sessioncookie`的cookie。在第二個請求中,我們檢索該cookie,並在響應中返回它的值。
九、結語
在本文中,我們介紹了`get()`函數的許多不同用法,包括基本使用、URL參數傳遞、超時處理、處理響應、使用代理伺服器、基本身份驗證、自定義請求頭部以及會話對象。這些技術可以幫助您更好地了解和使用`get()`函數,以便更輕鬆地進行HTTP請求和響應處理。
原創文章,作者:VDXSC,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/333697.html