Python3 requests 模块

requests 是 Python 中最常用的第三方 HTTP 客户端库,用于发送各种 HTTP 请求(如 GET、POST 等),处理响应数据,比 Python 内置的 urllib 更简洁易用。

一、安装 requests

requests 不是 Python 标准库,需要先通过 pip 安装:
pip install requests
 

二、基本使用

1. 发送 GET 请求

GET 是最常用的 HTTP 方法,用于从服务器获取数据。
 
import requests

# 发送 GET 请求
url = "https://httpbin.org/get"  # 测试接口
response = requests.get(url)

# 响应内容处理
print("状态码:", response.status_code)  # 200 表示成功
print("响应头:", response.headers)       # 字典形式的响应头
print("文本内容:", response.text)        # 字符串形式的响应体
print("字节内容:", response.content)      # 字节形式的响应体(用于图片等二进制数据)
 

2. 带参数的 GET 请求

如果需要在 URL 中添加查询参数(如 ?key1=value1&key2=value2),可以用 params 参数传递字典,requests 会自动处理编码:
 
import requests

url = "https://httpbin.org/get"
params = {
    "name": "张三",
    "age": 20
}

# 发送带参数的 GET 请求
response = requests.get(url, params=params)

print("最终请求的 URL:", response.url)  # 自动拼接为:https://httpbin.org/get?name=张三&age=20
print("响应数据(JSON):", response.json())  # 解析 JSON 响应(返回字典)
 
 
注意:response.json() 仅适用于响应体是 JSON 格式的情况,否则会抛出 JSONDecodeError

3. 发送 POST 请求

POST 常用于向服务器提交数据(如表单提交、API 数据提交)。
(1)提交表单数据(application/x-www-form-urlencoded
用 data 参数传递字典:
 
import requests

url = "https://httpbin.org/post"
data = {
    "username": "test",
    "password": "123456"
}

# 发送 POST 请求(表单数据)
response = requests.post(url, data=data)
print(response.json())
 
(2)提交 JSON 数据(application/json
用 json 参数传递字典,requests 会自动设置 Content-Type: application/json
 
import requests

url = "https://httpbin.org/post"
json_data = {
    "name": "李四",
    "hobby": ["读书", "运动"]
}

# 发送 POST 请求(JSON 数据)
response = requests.post(url, json=json_data)
print(response.json())
 

三、高级功能

1. 设置请求头(Headers)

有些网站会验证请求头(如 User-Agent),模拟浏览器请求可以避免被拦截:
 
import requests

url = "https://httpbin.org/get"
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36",
    "Accept": "application/json"
}

response = requests.get(url, headers=headers)
print(response.text)
 

2. 处理 cookies

requests 会自动处理响应中的 cookies,也可以手动设置请求 cookies:
 
import requests

url = "https://httpbin.org/cookies"

# 手动设置 cookies
cookies = {"user_id": "12345"}
response = requests.get(url, cookies=cookies)
print(response.json())

# 获取响应中的 cookies
print("响应 cookies:", response.cookies.get_dict())  # 字典形式的 cookies
 

3. 会话保持(Session)

当需要维持会话(如登录后保持登录状态)时,使用 Session 对象:
import requests

# 创建会话对象
session = requests.Session()

# 第一步:登录(会话会自动保存 cookies)
login_url = "https://httpbin.org/post"
login_data = {"username": "test", "password": "123"}
session.post(login_url, data=login_data)

# 第二步:访问需要登录的页面(自动携带登录 cookies)
profile_url = "https://httpbin.org/get"
response = session.get(profile_url)
print(response.text)

# 关闭会话
session.close()
 

4. 异常处理

网络请求可能出现各种错误(如超时、连接失败等),需要捕获异常:
 
import requests
from requests.exceptions import RequestException, Timeout, ConnectionError

url = "https://httpbin.org/get"

try:
    # 设置超时时间(秒)
    response = requests.get(url, timeout=5)
    response.raise_for_status()  # 若状态码为 4xx/5xx,抛出 HTTPError
    print("请求成功:", response.text)
except Timeout:
    print("请求超时")
except ConnectionError:
    print("连接失败")
except RequestException as e:
    print(f"请求出错:{e}")
 
 
response.raise_for_status() 会在状态码为 4xx(客户端错误)或 5xx(服务器错误)时抛出 HTTPError

四、总结

requests 模块简化了 HTTP 请求的处理,核心功能包括:
 
  • 发送 GET/POST 等请求
  • 处理参数、请求头、cookies
  • 解析 JSON 响应
  • 会话保持和异常处理

posted on 2025-10-15 09:17  小陶coding  阅读(85)  评论(0)    收藏  举报