一个关于python3 requests库使用代理访问IP查询网站的问题?

解决方案:

1:完整查看你发出的请求信息,带代理ip去请求这个网址:https://httpbin.org/get?show_env=1

2:检查是匿名代理还是透明代理:从请求信息中看X-Forwarded-For: "***.7.*9.8",字段,

如果该字段仅为你真实IP地址,则说明代理不起效果

如果该字段仅为代理IP地址,则说明为高度匿名代理

如果该字段为 "代理IP地址,真实ip地址",则说明为透明代理

关于代码,请参考:luyishisi/Anti-Anti-Spider

我写过有3种更换ip的方式,应该可以帮到你

这个问题大概是这样的,这些有代理IP的网站我猜想是通过Nmap: the Network Mapper 等工具扫描来的。

有漏洞的企业的运维,自己也会扫描,会补上漏洞的。

等你使用的时候,可能已经被补上漏洞,所以你检测的代理不可用。

代理还分高匿和透明。

透明代理会显示的是http发起者的ip地址。

用Python 代码或http 工具发起的http 返回的都是我电脑的IP,说明这个59.49.129.60:8998

代理是一个透明代理。

使用requests库代理ip设置,官方文档给出的方法是

也就是以字典的形式,‘协议’:‘协议://ip:端口’

但我发现有些人省掉第二个协议,直接写出 ‘协议’:‘ip:端口’,这种方式是否能正常访问呢?

在网上找了几个代理ip试了一下

代码如下

用了两个网址,一个为http协议,一个为https

先测试一下proxy1,是否能正常代理

proxy1可以,那proxy3更不要说

意料之中

测试一下https的

无论点多少次,总是会报错,可见这样是不行

测试proxy4看看

得出结论:http协议可以省略,但https不可以,所以,无论是http还是https,以防万一,都不要省略,都要按官方格式写上。

自动选择代理ip

官方给出的举例字典有两个值的,requests库会根据需要自动选择不同协议的ip吗?测试代码

打乱顺序

https

proxy1

proxy2

结论:说明requests库代理会根据协议不同选择但存在多个相同协议的代理ip顺序又是怎样的呢,还是随机的呢?

代理ip顺序

测试代码

打乱成4种顺序,分别一一测试

proxy1

proxy2

proxy3

proxy4

结论:

如果存在多个相同协议的代理ip,requests库不会随机选择,但会根据不同协议进行选择,选择顺序是从最后一个开始