Requests 基础教程
requests 是 Python 中非常常用的一个第三方 HTTP 库,用于发送 HTTP 请求。它的语法简单,功能强大,常用于与 Web 接口进行交互。
pip install requests
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)
data = {'username': 'admin', 'password': '123456'}
response = requests.post('https://example.com/post', data=data)
print(response.json())
json_data = {'key': 'value'}
response = requests.post('https://example.com/post', json=json_data)
print(response.json())
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 · 高级场景大全(可直接用)
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())
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("下载完成!")
很多登录网站需要先拿 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 就保持登录状态。
import requests
r = requests.get("https://example.com/get")
print("URL:", r.request.url)
print("Headers:", r.request.headers)
print("Body:", r.request.body)
print("Status:", r.status_code)
print("Response Headers:", r.headers)
print("Text:", r.text)
session = requests.Session()
r1 = session.get("https://example.com/page1") # 保存 cookies
r2 = session.get("https://example.com/page2") # 继续使用 cookies
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)等。
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
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 秒未读到数据 -> 抛异常
payload = {"id": 1, "name": "martin"}
r = requests.post("https://api.example.com/update", json=payload)
print(r.json())
requests.get("https://example.com", verify=False)
requests.put("https://api.example.com/item/1", json={"name": "new"})
requests.delete("https://api.example.com/item/1")
files = {
"file": open("avatar.png", "rb"),
}
data = {
"user": "martin",
"desc": "profile avatar"
}
requests.post("https://example.com/upload", data=data, files=files)
headers = {
"User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 14_0 like Mac OS X)"
}
requests.get("https://example.com", headers=headers)