在使用 Python 的 Requests 库发送 HTTP 请求时,有哪些常见的方式可以加入 Cookie?请给出相应的代码示例。
考察说明
考查候选人是否掌握 Requests 库中传递 Cookie 的多种方法及其使用场景。
回答思路
- 【回答框架 1】核心方法是使用参数 cookies,它接受一个字典,Requests 会将其转换为符合规范的 Cookie 头。示例:cookies = {'key': 'value'} 然后 requests.get(url, cookies=cookies)。
- 【回答框架 2】第二种方式是通过请求头 headers 直接设置 Cookie 字符串,例如 headers = {'Cookie': 'key=value; key2=value2'},这适用于需要精确控制 Cookie 头或已有原始字符串的场景。
- 【回答框架 3】第三种是使用 http.cookiejar 中的 CookieJar 对象,便于会话管理和跨请求保持状态。可以先创建 CookieJar,添加 Cookie 对象,然后传给 cookies 参数。
- 【回答框架 4】如果使用会话对象 requests.Session(),则可以在会话级别设置 cookies 属性或使用 session.cookies.set,这样后续该会话的所有请求都会自动携带这些 Cookie,适合登录后保持会话的场景。
- 【回答框架 5】实际上,参数 cookies 会自动处理编码和拼接,与手动设置 Headers 相比,能避免格式错误;同时 cookies 参数也可以接受列表形式的元组或 CookieJar 对象,灵活性更高。
- 【关键点 1】Requests 主要支持通过 cookies 参数(字典、CookieJar)和 headers 中的 Cookie 头传递 Cookie。
- 【关键点 2】使用 Session 对象可以跨请求保持 Cookie,适合会话维持。
- 【关键点 3】手动设置 Cookie 头时需注意格式和可能存在的编码问题。
- 【易错点 1】不要混淆 requests.get 的 cookies 参数与 headers 中的 Cookie,同时使用后者可能会覆盖前者。
- 【易错点 2】Cookie 值如果包含特殊字符(如分号),字典方式会自动处理,但手动拼接字符串时可能出错。
- 【易错点 3】不要在代码中硬编码敏感 Cookie,应使用环境变量或配置文件。