iT邦幫忙

2024 iThome 鐵人賽

DAY 27
0

肆、發送文件

可以使用 files 參數來發送文件到服務器,例如通過 POST 請求上傳文件。

import requests

url = "https://httpbin.org/post"
files = {'file': open('example.txt', 'rb')}
response = requests.post(url, files=files)
print(response.json())

這裡的 files 參數用來指定需要上傳的文件,open() 函數以二進制模式讀取文件。

伍、超時和異常處理

在網絡請求中,設置超時可以防止程序長時間等待響應。requests 支持設置超時時間,並自動處理異常。

一、設置超時

可以使用 timeout 參數來設置超時時間(以秒為單位)。

import requests

try:
    response = requests.get("https://httpbin.org/delay/3", timeout=2)
    print(response.text)
except requests.Timeout:
    print("請求超時")

如果超時時間設置為 2 秒,但服務器延遲 3 秒返回,程序會觸發 Timeout 異常。

二、常見異常

requests 模塊會拋出一些常見異常,常用的處理方式如下:

import requests

try:
    response = requests.get("https://httpbin.org/get", timeout=2)
    response.raise_for_status()  # 如果狀態碼不是 200,則拋出 HTTPError
except requests.Timeout:
    print("請求超時")
except requests.ConnectionError:
    print("網絡連接錯誤")
except requests.HTTPError as e:
    print(f"HTTP 錯誤: {e}")
  • Timeout:請求超時。
  • ConnectionError:網絡連接錯誤。
  • HTTPError:服務器返回的 HTTP 錯誤碼不在 2xx 範圍內。

陸、使用會話來保持連接

requests.Session() 可以保持與服務器之間的連接,這在需要多次向同一服務器發送請求時比較高效,例如保持登錄狀態、共享 cookies 等。

import requests

session = requests.Session()

# 發送請求並保持會話
response = session.get("https://httpbin.org/cookies/set/sessioncookie/123456")
print(response.text)

# 獲取會話中的 cookies
response = session.get("https://httpbin.org/cookies")
print(response.text)

這樣可以在多個請求之間保持同一個會話,減少服務器的資源消耗。


上一篇
第26天:網絡請求 part1
下一篇
第28天:JSON操作
系列文
python30天入門學習30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言