在用 Python 编程时,怎样借助 requests 库来发起 HTTP 请求?
考察说明
考查对 requests 库基本用法的掌握程度,能否清晰说出发送请求的核心步骤与关键参数。
回答思路
- 【回答框架 1】requests 库发送 HTTP 请求的核心是调用对应方法,如 get、post 等。方法内需要传入目标 URL,常用参数有 params 用于 URL 查询字符串,data 用于表单数据,json 用于发送 JSON 格式数据,headers 用于自定义请求头,timeout 用于设置超时时间。
- 【回答框架 2】以 get 为例,resp = requests.get(url, params={'key': 'value'}, timeout=5) 即可发起请求。响应对象 resp 包含 status_code 属性表示状态码,text 属性返回文本内容,json() 方法可将响应解析为 Python 字典。需注意请求后应检查状态码,并通过 resp.raise_for_status() 抛出异常。
- 【回答框架 3】发送 POST 请求时,若提交表单数据,用 data 参数;若提交 JSON 数据,用 json 参数,requests 会自动设置 Content-Type 为 application/json。此外可传递 files 参数上传文件,cookies 参数携带会话信息。
- 【回答框架 4】使用 session 对象可保持会话,复用连接,减少握手开销,适合需要保持登录状态或连续请求的场景。session = requests.Session(),之后用 session.get 等方法发送请求,效果与直接调用 requests 方法一致,但能自动管理 cookies 和连接池。
- 【关键点 1】发送请求需指定方法(如 get、post)和 URL,并可配置 params、data、json、headers、timeout 等参数。
- 【关键点 2】响应对象通过 status_code 获取状态码,text 获取文本,json() 解析 JSON,并可用 raise_for_status() 处理异常。
- 【关键点 3】用 session 对象保持会话,可复用连接和自动管理 cookies。
- 【易错点 1】不设置 timeout 可能导致请求长时间阻塞,应始终指定超时时间。
- 【易错点 2】误将 JSON 数据放入 data 参数,导致 Content-Type 错误,应使用 json 参数。
- 【易错点 3】直接访问响应内容而不判断状态码,可能因请求失败得到错误页面或空数据。