Python请求会话不旋转代理



我使用的是由(https://proxy.webshare.io/proxy/rotating?)其中每个对轮换代理的请求接收一个新的IP地址。当我使用requests.get('https://httpbin.org/get', headers=headers, proxies=get_proxy())每当我提出请求时,它都会返回一个新的IP。但是当使用时

session = requests.Session()
session.headers = headers
session.proxies = get_proxy()
session.get('https://httpbin.org/get')

每当我提出请求时,它都会返回相同的IP。会话对象的行为与代理情况下的request.get((函数有何不同。

Session为每个后续请求使用以前设置的变量/值,如Cookie。如果你想更改会话中每个请求的代理,那么每次都使用Prepared Requests进行设置,或者只将其放入一个函数中:

def send(session, url):
return session.get(url, proxy=get_proxy())
sess = requests.Session()
sess.headers = headers
resp = send(sess, 'https://httpbin.org/get')
print(resp.status_code)

但是,如果你试图隐藏你的原始IP以进行抓取或其他操作,你可能不希望保存cookie等,所以你不应该使用会话。

以下代码有效,需要一个proxylistfile.txt文件来检查每个代理:

from requests import *
import bs4 
import sys 
if len(sys.argv) < 2:
print('Usage: ./testproxy.py <proxylistfile.txt>')
sys.exit()
ifco = 'http://ifconfig.co'
PROXIES_FILE = sys.argv[1]
proxy = dict()
with open(PROXIES_FILE) as file:
for line in file:
if line[0] == '#' or line == "n":
continue
line_parts = line.replace('n', '').split(':')
proxy['http'] = f'{line_parts[0]}://{line_parts[1]}:{line_parts[2]}'
try:
i = get(ifco, proxies=proxy, timeout=11)
print(f"{proxy['http']} - successfull - IP ---> ", end='')
zu = bs4.BeautifulSoup(i.text, 'html.parser')
testo = zu.findAll('p', text=True)[0].get_text()
print(testo)
except:
print(f"{proxy['http']} - unsuccessfull")
pass

它连接到ifconfig.co站点并返回其真实ip以检查代理是否工作。输出将类似于:

http://proxy:port - successfull - IP ---> your.real.ip

输入文件格式应该类似于:

http:1.1.1.1:3128

我终于切换到另一个轮换代理提供程序(https://www.proxyegg.com)现在这个问题已经解决了。

最新更新