Python requests 模块常用函数与示例

1. 基础概念与入口函数

requests.request(method, url, **kwargs)

所有具体请求函数(getpost 等)都是对该函数的封装。method 必须是合法的 HTTP 方法。

import requests

resp = requests.request(
    method='GET',
    url='https://httpbin.org/get',
    params={'q': 'python'},
    headers={'User-Agent': 'my-app/1.0'},
    timeout=5
)
print(resp.status_code)   # 200
print(resp.json())
    

2. 常用快捷函数

2.1 GET 示例

import requests

resp = requests.get(
    'https://api.github.com/repos/psf/requests',
    params={'per_page': 5},
    headers={'Accept': 'application/vnd.github.v3+json'}
)
print(resp.status_code)      # 200
print(resp.json()['stargazers_count'])
    

2.2 POST 示例(表单数据)

import requests

payload = {'username': 'test', 'password': '123456'}
resp = requests.post('https://httpbin.org/post', data=payload)
print(resp.status_code)      # 200
print(resp.json()['form'])
    

2.3 POST 示例(JSON)

import requests, json

data = {'name': 'Alice', 'age': 30}
resp = requests.post('https://httpbin.org/post', json=data)
print(resp.json()['json'])
    

3. 常用关键字参数(kwargs)

3.1 超时与异常处理

import requests

try:
    resp = requests.get('https://httpbin.org/delay/10', timeout=3)
    resp.raise_for_status()
except requests.exceptions.Timeout:
    print('请求超时')
except requests.exceptions.HTTPError as e:
    print('HTTP 错误:', e)
    

3.2 使用代理

import requests, random

proxy_pool = [
    {'http': 'http://121.237.148.95:3000'},
    {'http': 'http://1.202.116.62:8118'},
    {'http': 'http://218.75.102.198:8000'}
]
proxy = random.choice(proxy_pool)

resp = requests.get('https://httpbin.org/ip', proxies=proxy, timeout=5)
print(resp.json())
    

4. Session 对象(保持会话)

使用 requests.Session() 可以在多次请求之间共享 cookiesheaders、连接池等,提升效率。

import requests

session = requests.Session()
session.headers.update({'User-Agent': 'my-app/1.0'})

# 第一次请求,服务器返回 cookie
resp1 = session.get('https://httpbin.org/cookies/set/sessioncookie/abc123')
print('第一次 cookies:', resp1.cookies.get_dict())

# 第二次请求自动带上上一次的 cookie
resp2 = session.get('https://httpbin.org/cookies')
print('第二次返回的 cookies:', resp2.json())
    

Session 还能通过 session.mount() 自定义适配器,实现长连接池、重试等高级特性。

5. 进阶示例:文件上传、下载、流式读取

5.1 上传二进制文件

import requests

files = {'file': open('example.pdf', 'rb')}
resp = requests.post('https://httpbin.org/post', files=files)
print(resp.json()['files'])
    

5.2 下载大文件(流式)

import requests

url = 'https://speed.hetzner.de/100MB.bin'
with requests.get(url, stream=True) as r:
    r.raise_for_status()
    with open('100MB.bin', 'wb') as f:
        for chunk in r.iter_content(chunk_size=8192):
            if chunk:
                f.write(chunk)
    print('下载完成')
    

requests 提供了直观的 API,涵盖了 HTTP 方法、会话管理、代理、超时、流式处理等常见需求。掌握上述函数与关键字参数后,基本可以应对大多数网络交互场景。