Я использую частный вращающийся прокси, предоставленный (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. Если вы хотите менять прокси для каждого запроса в сессии, то используйте Подготовленные запросы, чтобы устанавливать его каждый раз или просто поместите в функцию:
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 и т. д., поэтому вам не следует использовать сеансы.
Нет смысла чередовать прокси, если вы хотите сохранить куки/сессии. Веб-сайт по-прежнему может идентифицировать вас как вас. Так что просто используйте обычную сессию без смены прокси. (Используйте только один или вообще ни одного.)
Добро пожаловать в StackOverflow. Читайте «Что делать, когда кто-то отвечает на мой вопрос? », и про Голосование и Принятие.
Следующий код работает, и для проверки каждого прокси требуется файл 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), и теперь проблема решена.
отлично, кстати, почему мы не должны сохранять файлы cookie, разве веб-сайты не требуют файлов cookie. также, когда я пытаюсь сделать запрос без сеанса, он не работает, на каждый запрос он дает капчу. я использую те же заголовки для сеанса и без сеанса.