溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python使用requests模塊與Web應用進行交互

發布時間:2021-09-16 22:17:51 來源:億速云 閱讀:255 作者:chen 欄目:大數據
# Python使用requests模塊與Web應用進行交互

## 引言

在現代Web開發中,與API或Web服務進行交互是常見需求。Python的`requests`模塊以其簡潔優雅的API成為HTTP客戶端庫的事實標準。本文將詳細介紹如何使用`requests`模塊完成GET/POST請求、處理響應、管理會話以及應對常見場景。

## 一、安裝與基礎使用

### 1.1 安裝requests
```bash
pip install requests

1.2 發起GET請求

import requests

response = requests.get('https://api.example.com/data')
print(response.status_code)  # 200
print(response.text)  # 響應內容

二、核心功能詳解

2.1 請求參數處理

# URL參數
params = {'key1': 'value1', 'key2': 'value2'}
response = requests.get('https://api.example.com', params=params)

# 實際請求URL變為:
# https://api.example.com?key1=value1&key2=value2

2.2 POST請求與數據發送

# 表單數據
data = {'username': 'admin', 'password': 'secret'}
response = requests.post('https://api.example.com/login', data=data)

# JSON數據
json_data = {'name': 'Alice', 'age': 25}
response = requests.post('https://api.example.com/users', json=json_data)

2.3 響應處理

response = requests.get('https://api.example.com/data')

# 響應內容
print(response.text)  # 文本格式
print(response.json())  # 自動解析JSON

# 響應頭
print(response.headers)
print(response.headers['Content-Type'])

# 狀態碼檢查
response.raise_for_status()  # 非200狀態碼拋出異常

三、高級功能

3.1 會話管理

# 創建會話保持cookies
session = requests.Session()
session.get('https://api.example.com/login', params={'user': 'test'})
response = session.get('https://api.example.com/dashboard')

3.2 超時設置

# 連接超時3秒,讀取超時5秒
requests.get('https://api.example.com', timeout=(3, 5))

3.3 文件上傳

files = {'file': open('report.xls', 'rb')}
response = requests.post('https://api.example.com/upload', files=files)

3.4 代理設置

proxies = {
  'http': 'http://10.10.1.10:3128',
  'https': 'http://10.10.1.10:1080',
}
requests.get('https://api.example.com', proxies=proxies)

四、安全與認證

4.1 Basic認證

from requests.auth import HTTPBasicAuth
response = requests.get(
    'https://api.example.com',
    auth=HTTPBasicAuth('username', 'password')
)

4.2 Bearer Token

headers = {'Authorization': 'Bearer YOUR_TOKEN'}
response = requests.get('https://api.example.com/protected', headers=headers)

4.3 SSL證書驗證

# 禁用驗證(不推薦生產環境使用)
requests.get('https://api.example.com', verify=False)

# 自定義CA證書
requests.get('https://api.example.com', verify='/path/to/cert.pem')

五、錯誤處理與調試

5.1 常見異常

try:
    response = requests.get('https://api.example.com', timeout=5)
    response.raise_for_status()
except requests.exceptions.Timeout:
    print("請求超時")
except requests.exceptions.HTTPError as err:
    print(f"HTTP錯誤: {err}")
except requests.exceptions.RequestException as err:
    print(f"請求異常: {err}")

5.2 調試請求

# 啟用調試日志
import logging
import http.client

http.client.HTTPConnection.debuglevel = 1
logging.basicConfig()
logging.getLogger().setLevel(logging.DEBUG)

六、性能優化

6.1 連接池復用

# requests默認保持連接池
session = requests.Session()
for _ in range(10):
    session.get('https://api.example.com')  # 復用TCP連接

6.2 流式響應

# 處理大文件時避免內存溢出
response = requests.get('https://example.com/large-file', stream=True)
with open('large_file', 'wb') as f:
    for chunk in response.iter_content(chunk_size=8192):
        f.write(chunk)

七、實際應用案例

7.1 調用REST API

def get_user(user_id):
    response = requests.get(f'https://api.example.com/users/{user_id}')
    return response.json()

def create_user(user_data):
    response = requests.post(
        'https://api.example.com/users',
        json=user_data,
        headers={'Content-Type': 'application/json'}
    )
    return response.json()

7.2 網頁內容抓取

response = requests.get('https://example.com')
from bs4 import BeautifulSoup
soup = BeautifulSoup(response.text, 'html.parser')
print(soup.title.string)

結語

requests模塊通過簡潔的API實現了強大的HTTP客戶端功能。掌握本文介紹的技術要點后,您已經能夠處理大多數Web交互場景。對于更復雜的需求,可以考慮結合aiohttp實現異步請求,或使用requests-cache等擴展庫實現緩存功能。

最佳實踐提示: 1. 總是檢查響應狀態碼 2. 為生產環境配置合理的超時時間 3. 敏感信息不要硬編碼在代碼中 4. 考慮使用retry機制處理臨時性失敗 “`

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女