请求忽略无效的代理

2024-04-20 02:00:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在学习如何在发出请求时使用代理,但我遇到了一个大问题,主要是requests似乎不在乎所提供的代理是否有效。这使得我几乎无法判断某件事是否真的起作用了,我真的不知道该怎么做。关于requests提供的代理的文档非常少。在

我的代码从如下列表中获取用户代理字符串和代理:

proxy = {"https": "https://%s:%s@%s" % (USERNAME, PASSWORD, random.choice(PROXY_LIST))}
headers = {"User-Agent": random.choice(USER_AGENT_LIST)}
return partial(requests.get, proxies=proxy, headers=headers)

代理列表项的示例:185.46.87.199:8080

问题是我可以更改用户名,更改密码,等等。。。而且requests似乎并不在意。发送的所有请求中有很大一部分根本没有通过代理。有没有办法测试代理?看看请求是否真的通过了一个提供的代理?任何调试和/或修复此问题的工具都将不胜感激。在

在larsks的建议下,将日志级别改为DEBUG,得到如下输出:

^{pr2}$

不管auth是正确的还是错误的,都没有改变,调试信息中没有提到代理。同样,请求通过我的本地IP。在


Tags: 字符串代码用户文档https代理列表username
1条回答
网友
1楼 · 发布于 2024-04-20 02:00:30

请求以DEBUG优先级记录调试信息,因此如果通过logging模块启用调试日志记录,则可以看到各种诊断。例如:

>>> import logging
>>> logging.basicConfig(level='DEBUG')

有了这些,我就可以开始跑步了:

^{pr2}$

看看:

INFO:requests.packages.urllib3.connectionpool:Starting new HTTP connection (1): localhost
DEBUG:requests.packages.urllib3.connectionpool:"GET http://mentos.com/ HTTP/1.1" 301 0
DEBUG:requests.packages.urllib3.connectionpool:"GET http://us.mentos.com HTTP/1.1" 200 32160
<Response [200]>

这清楚地显示了与代理的连接。在

希望这足以让你开始。我正在使用Session 在这里,但是使用partial的解决方案的行为类似。在

使用代理将上述输出与requests而不是时的日志消息进行比较:

>>> requests.get('http://mentos.com')
INFO:requests.packages.urllib3.connectionpool:Starting new HTTP connection (1): mentos.com
DEBUG:requests.packages.urllib3.connectionpool:"GET / HTTP/1.1" 301 0
INFO:requests.packages.urllib3.connectionpool:Starting new HTTP connection (1): us.mentos.com
DEBUG:requests.packages.urllib3.connectionpool:"GET / HTTP/1.1" 200 10566
<Response [200]>

在这里,我们看到的是与远程站点的初始连接 ,并且GET请求不包括主机名。在

更新

以上,使用HTTPS url:

>>> response = s.get('https://google.com')
>>> response
<Response [200]>

请注意,我正在设置http和{}键。在

相关问题 更多 >