Skip to main content
Documents
Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

Requests 基础教程

requests 是 Python 中非常常用的一个第三方 HTTP 库,用于发送 HTTP 请求。它的语法简单,功能强大,常用于与 Web 接口进行交互。

✅ 安装方式

pip install requests

✅ 基本用法

1. 发送 GET 请求

import requests

response = requests.get('https://example.com/get')
print(response.status_code)
print(response.text)

带参数的请求

import requests

# URL: https://example.com/get?id=100

data = {"id": 100}
response = requests.get('https://example.com/get', payload=data)

2. 发送 POST 请求

data = {'username': 'admin', 'password': '123456'}
response = requests.post('https://example.com/post', data=data)
print(response.json())

3. 发送 JSON 数据

json_data = {'key': 'value'}
response = requests.post('https://example.com/post', json=json_data)
print(response.json())

4. 添加请求头

headers = {'User-Agent': 'my-app/0.0.1'}
response = requests.get('https://example.com/headers', headers=headers)
print(response.text)

✅ 常用属性

response.status_code     # HTTP 状态码
response.text            # 响应体文本
response.content         # 二进制内容(如图片)
response.json()          # JSON 响应(会自动转为字典)
response.headers         # 响应头

✅ 上传文件

files = {'file': open('test.txt', 'rb')}
response = requests.post('https://example.com/post', files=files)

✅ 超时设置

response = requests.get('https://example.com/delay/3', timeout=2)
# 如果请求超过 2 秒没有响应,就会抛出 Timeout 异常

✅ 异常处理(推荐使用)

try:
    response = requests.get('https://example.com/status/404')
    response.raise_for_status()  # 如果不是 200 会抛异常
except requests.exceptions.RequestException as e:
    print(f"请求失败:{e}")

下面给你整理一份 Python requests 高级场景大全(带完整可用代码),涵盖你提到的:

  • 发送带 Token 请求
  • 下载文件
  • 爬虫模拟登录
  • 抓包调试
  • 会话保持
  • 代理
  • 重试机制
  • 文件上传/下载
  • Cookies 操作

🔥 Python Requests · 高级场景大全(可直接用)

发送带 Token 的请求(常见于 JWT 登录)

(1)Bearer Token

import requests

token = "your_jwt_token_here"
headers = {
    "Authorization": f"Bearer {token}"
}

response = requests.get("https://api.example.com/user", headers=headers)
print(response.json())

(2)在 URL 参数加 token

requests.get("https://api.example.com/data?token=xxxxx")

下载文件(大文件流式下载)

import requests

url = "https://example.com/file.zip"
local_path = "file.zip"

with requests.get(url, stream=True) as r:
    r.raise_for_status()
    with open(local_path, "wb") as f:
        for chunk in r.iter_content(chunk_size=8192):
            f.write(chunk)

print("下载完成!")

爬虫模拟登录(Session + 表单提交)

很多登录网站需要先拿 cookies -> 再提交账号密码。

import requests

session = requests.Session()

# 第一次访问以获取 cookies
session.get("https://example.com/login")

# 提交登录表单
payload = {
    "username": "admin",
    "password": "123456"
}

response = session.post("https://example.com/login", data=payload)

print("登录成功" if "欢迎" in response.text else "登录失败")

之后用同一个 session 就保持登录状态。

抓包调试(输出请求/响应信息)

(1)记录完整请求

import requests

r = requests.get("https://example.com/get")

print("URL:", r.request.url)
print("Headers:", r.request.headers)
print("Body:", r.request.body)

(2)记录响应信息

print("Status:", r.status_code)
print("Response Headers:", r.headers)
print("Text:", r.text)

会话保持(自动保存 Cookies)

session = requests.Session()

r1 = session.get("https://example.com/page1")  # 保存 cookies
r2 = session.get("https://example.com/page2")  # 继续使用 cookies

使用代理(HTTP / HTTPS)

proxies = {
    "http": "http://127.0.0.1:7890",
    "https": "http://127.0.0.1:7890",
}

r = requests.get("https://example.com/ip", proxies=proxies)
print(r.text)

可用于翻墙、抓包工具(Fiddler/Charles)等。

重试机制(配合 urllib3 Retry)

import requests
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry

session = requests.Session()

retry = Retry(
    total=5,
    backoff_factor=1,
    allowed_methods=["GET", "POST"]
)

adapter = HTTPAdapter(max_retries=retry)
session.mount("http://", adapter)
session.mount("https://", adapter)

response = session.get("https://example.com/status/500")
print(response.status_code)

上传文件(单文件、多文件)

单文件上传

files = {
    "file": open("test.jpg", "rb")
}

response = requests.post("https://example.com/post", files=files)
print(response.text)

多文件上传

files = [
    ("files", ("a.txt", open("a.txt", "rb"))),
    ("files", ("b.txt", open("b.txt", "rb")))
]

requests.post("https://example.com/post", files=files)

处理 Cookies(查看 / 设置)

查看 cookies

r = requests.get("https://example.com")
print(r.cookies)

设置 cookies

cookies = {"sessionid": "abcdef123456"}
requests.get("https://example.com", cookies=cookies)

自定义超时(连接 + 读取)

requests.get("https://example.com", timeout=(2, 5))
# 2 秒未连接 -> 抛异常
# 5 秒未读到数据 -> 抛异常

发送 JSON 请求(常用 API)

payload = {"id": 1, "name": "martin"}
r = requests.post("https://api.example.com/update", json=payload)
print(r.json())

忽略 SSL 证书(测试环境常用)

requests.get("https://example.com", verify=False)

构造自定义请求(PUT / DELETE / PATCH)

requests.put("https://api.example.com/item/1", json={"name": "new"})
requests.delete("https://api.example.com/item/1")

上传 JSON + 文件混合(API 常见)

files = {
    "file": open("avatar.png", "rb"),
}

data = {
    "user": "martin",
    "desc": "profile avatar"
}

requests.post("https://example.com/upload", data=data, files=files)

Mock 手机浏览器 UA(爬虫必备)

headers = {
    "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 14_0 like Mac OS X)"
}

requests.get("https://example.com", headers=headers)