Сеанс запросов 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() в случае прокси.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
2 170
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

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 и т. д., поэтому вам не следует использовать сеансы.

отлично, кстати, почему мы не должны сохранять файлы cookie, разве веб-сайты не требуют файлов cookie. также, когда я пытаюсь сделать запрос без сеанса, он не работает, на каждый запрос он дает капчу. я использую те же заголовки для сеанса и без сеанса.

Ritik Sahu Student 20.12.2020 11:20

Нет смысла чередовать прокси, если вы хотите сохранить куки/сессии. Веб-сайт по-прежнему может идентифицировать вас как вас. Так что просто используйте обычную сессию без смены прокси. (Используйте только один или вообще ни одного.)

aneroid 20.12.2020 12:39

Добро пожаловать в StackOverflow. Читайте «Что делать, когда кто-то отвечает на мой вопрос? », и про Голосование и Принятие.

aneroid 20.12.2020 12:43

Следующий код работает, и для проверки каждого прокси требуется файл 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), и теперь проблема решена.

Другие вопросы по теме