正如标题中所说,我试图通过几个不同的代理依次访问一个 url(使用 for 循环)。现在这是我的代码:
import requests
import json
with open('proxies.txt') as proxies:
for line in proxies:
proxy=json.loads(line)
with open('urls.txt') as urls:
for line in urls:
url=line.rstrip()
data=requests.get(url, proxies={'http':line})
data1=data.text
print data1
和我的 urls.txt 文件:
http://api.exip.org/?call=ip
和我的 proxies.txt 文件:
{"https": "84.22.41.1:3128"}
{"http":"194.126.181.47:81"}
{"http":"218.108.170.170:82"}
我在 [www.hidemyass.com][1] 上得到的
由于某种原因,输出是
68.6.34.253
68.6.34.253
68.6.34.253
就好像它是通过我自己的路由器ip地址访问那个网站一样。换句话说,它并没有试图通过我给它的代理进行访问,它只是循环遍历并一遍又一遍地使用我自己的代理。我做错了什么?
请您参考如下方法:
根据 this线程,您需要将 proxies 字典指定为 {"protocol": "ip:port"},因此您的代理文件应该如下所示
{"https": "84.22.41.1.3128"}
{"http": "194.126.181.47:81"}
{"http": "218.108.170.170:82"}
编辑: 您正在为 URL 和代理重用 line。在内循环中重用 line 没问题,但你应该使用 proxies=proxy——你已经解析了 JSON,不需要构建另一个字典.此外,正如 abanert 所说,您应该进行检查以确保您请求的协议(protocol)与代理的协议(protocol)相匹配。代理被指定为字典的原因是允许查找匹配的协议(protocol)。
