在一个 Python urllib 打开器中同时使用 Cookie 与代理
在同一个 urllib 打开器中组合 ProxyHandler 与 HTTPCookieProcessor,让相关的代理请求共享预期的 Cookie 罐。
urllib 打开器可以在通过代理发送请求的同时维护网站 Cookie。给它两个处理器:
from http.cookiejar import CookieJar
from urllib.request import (
HTTPCookieProcessor, ProxyHandler, build_opener,
)
cookies = CookieJar()
opener = build_opener(
ProxyHandler({"http": "http://proxy.example:8080"}),
HTTPCookieProcessor(cookies),
)
with opener.open("http://www.example.com/", timeout=10) as response:
body = response.read()示例使用普通 HTTP 目标及其显式代理路由。若要在不使用代理认证的情况下检查允许访问的公共站点,请为该路由从HTTP 代理列表中选择候选,同时保留预期的 Cookie 罐。对同一网站会话的后续请求复用该 opener。Cookie 处理器会提取可接受的响应 Cookie,并把适用的 Cookie 添加到后续请求中。
每次调用前新建空的 CookieJar 会丢弃这种连续性。让 Cookie 罐与它所代表的会话保持在一起;对于 Cookie 需要彼此隔离的账户或工作流,使用单独的罐。
基本 CookieJar 将状态保存在内存中。若要在程序多次运行之间持久化,请选择合适的 FileCookieJar 子类,并有意识地保存或加载它。
这种安排无需安装全局 opener。调用该对象的 open 方法即可让代理与 Cookie 附着在同一操作上。