请描述 Python 中 requests 库发起 HTTP 请求的基本流程与常用方法。
考察说明
考查对 requests 库基本用法的掌握程度,包括发送请求、处理响应与异常。
回答思路
- 【回答框架 1】requests 库基于 urllib3,提供更简洁的 API。发送 GET 请求使用 requests.get(url),可传 params 字典自动编码查询参数;发送 POST 请求使用 requests.post(url, data=...) 或 json=...,json 参数自动序列化为 JSON 并设置 Content-Type。
- 【回答框架 2】Response 对象包含 status_code、headers、text、content 与 json() 方法。json() 在响应非 JSON 时抛出异常,应配合 status_code 判断或 try-except 使用。text 按响应编码解码,可用 response.encoding 或 apparent_encoding 修正。
- 【回答框架 3】请求常用参数包括 timeout(超时)、headers(自定义头)、auth(认证)、proxies(代理)和 verify(SSL 校验)。timeout 建议设置,否则可能长时间阻塞;verify 默认 True,自签名证书时可设 False 或传 CA 包。
- 【回答框架 4】异常处理需捕获 requests.RequestException,其子类如 ConnectionError、Timeout、HTTPError。使用 response.raise_for_status() 可将 4xx/5xx 状态码转为 HTTPError 抛出。
- 【回答框架 5】会话管理可用 requests.Session() 复用连接与 Cookie,比每次单独请求更高效,适合多请求场景,配合 with 语句确保资源释放。
- 【关键点 1】GET 参数用 params,POST 表单用 data,JSON 用 json 参数。
- 【关键点 2】timeout 参数必设,避免无限等待。
- 【关键点 3】Response.json() 需谨慎使用,配合状态码或异常处理。
- 【关键点 4】Session 复用连接,提升性能并管理 Cookie。
- 【易错点 1】误用 text 而不处理编码导致乱码。
- 【易错点 2】直接调用 json() 未捕获异常。
- 【易错点 3】忽略 timeout 造成请求挂起。