2

我正在开发一个在 CentOS 6.3 服务器集群上运行的 Python 分布式网络爬虫,该爬虫使用来自不同代理提供商的许多代理。对于用户名/密码认证的代理提供商来说,一切都像一个魅力。但是现在我们已经购买了一些使用基于 IP 的身份验证的代理,这意味着当我想使用其中一个代理爬入网页时,我需要从我们的一部分服务器发出请求。

问题是,在 Python 中有没有办法(使用库/软件)向通过 2 个代理的域发出请求?(一个代理是需要用于 IP 身份验证的子集之一,第二个是来自提供商的实际代理)或者是否有另一种方法可以在不将我们的服务器的这个子集设置为代理的情况下执行此操作?

我现在用来通过代理发出请求的代码使用 requests 库:

import requests
from requests.auth import HTTPProxyAuth

proxy_obj = {
    'http':proxy['ip']
}

auth = HTTPProxyAuth(proxy['username'], proxy['password')

data = requests.get(url, proxies = proxy_obj, auth = auth)

提前致谢!

4

1 回答 1

0

Python中有没有办法(使用库/软件)向通过2个代理的域发出请求?

如果您需要通过两个代理,看起来您将不得不使用HTTP tunneling,因此任何不在授权列表中的主机都必须在其中一台主机上连接 HTTP 代理服务器,并使用HTTPCONNECT方法来创建到远程代理的隧道,但使用库可能无法实现requests

或者是否有另一种方法可以在不将我们的服务器子集设置为代理的情况下做到这一点?

假设使用基于 IP 地址的身份验证的远程代理都期望相同的 IP 地址,那么您可以改为在集群和远程代理之间配置一个 NAT 路由器,以将所有出站 HTTP 请求转换为来自该单个 IP 地址.

但是,在您考虑实施这些不必要的复杂选项之前,并且考虑到您正在为这项服务付费,您不能只要求提供商允许您当前使用的整个 IP 地址范围的请求吗?

于 2013-04-25T18:23:33.263 回答