先从文件中选定一个代理,再为网站请求构建路由映射。候选出口的池本身并不是 Requests 的路由字典。

  1. 按既定格式解析这条记录。 非正式的 IP:port:user:password 行在 IPv6 地址或凭据含冒号时会有歧义。对于 IPv4 主机、数字端口和不含冒号的用户名,限定切分可以把剩余文本留作密码。这些限制不适用时,请使用独立的结构化字段。
  2. 为本次操作选定出口。 保留它真实的协议,并在构建其 URL 时对凭据各部分进行编码。不要把这个含密值写进常规日志。
  3. 把目标协议映射到那个选定的 URL。 对选定的一个 HTTP 代理来说,映射可以是这样:
routes = {
    'http': selected_proxy_url,
    'https': selected_proxy_url,
}

http 和 https 这两个键选择的是目标协议。像 http://203.0.113.10 这样的键选的则是发往该确切目标主机的请求;它并不标记该地址上的代理。把每个代理 IP 都当作键,可能让无关网站失去原本的路径。

把池解析一次,选定一个出口,再为客户端调用创建映射。把这些步骤分开,就能在改变选择策略时不改变 Requests 路由键的含义。

相关文章