Skip to main content
 首页 » 编程设计

Python:如何使用请求库通过多个不同的代理服务器访问 url

2025年05月04日19lidabo

正如标题中所说,我试图通过几个不同的代理依次访问一个 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)。