Использование прокси



Библиотека Requests предоставляет возможность использовать механизмы для скрытия реального IP. Самая распространенная ситуация – смена адреса для снижения вероятности получить бан.

# Импорт библиотеки для HTTP-запросов
import requests

# Функция для выполнения запроса с использованием прокси
def make_request(url, proxy):
    try:
        response = requests.get(url=url, proxies=proxy)
        print(response.json())
    except Exception as e:
        print(f"Ошибка: {e}")

# URL для тестирования прокси
url = 'http://httpbin.org/ip'

# Прокси для HTTP и HTTPS
proxy_http_https = {
    'http': 'http://103.177.45.3:80',
    'https': 'https://103.177.45.3:80',
}
make_request(url, proxy_http_https)

# Прокси для SOCKS4
proxy_socks4 = {
    'http': 'socks4://103.177.45.3:80',
    'https': 'socks4://103.177.45.3:80',
}
make_request(url, proxy_socks4)

# Прокси для SOCKS5
proxy_socks5 = {
    'http': 'socks5://103.177.45.3:80',
    'https': 'socks5://103.177.45.3:80',
}

make_request(url, proxy_socks5)

# Прокси с авторизацией
proxy_with_auth = {
    'http': 'socks5://login:password@103.177.45.3:80',
    'https': 'socks5://login:password@103.177.45.3:80',
}

make_request(url, proxy_with_auth)

При работе через прокси необходимо учитывать протокол, который использует конечный сайт (http и https). В словаре должен указываться аналогичный протокол. Метод .get() способен самостоятельно переходить на нужную схему, поэтому в словаре лучше сразу указывать обе схемы, что сделает код более гибким.

Стоит отдельно отметить протоколы SOCKS4 и SOCKS5. Они позволяют передавать любые типы данных через выбранные прокси. Это позволяет обеспечить дополнительный уровень анонимности.

HTTP и HTTPS для SOCKS: SOCKS прокси поддерживают как HTTP, так и HTTPS трафик. По этой причине, вы можете видеть оба типа схем (http и https) с протоколом SOCKS4 или SOCKS5.

В контексте парсинга протоколы HTTPS и HTTP имеют ряд важных различий.

Шифрование:

HTTPS (HTTP Secure) использует SSL/TLS для шифрования данных, что повышает уровень безопасности.

HTTP (HyperText Transfer Protocol) не шифрует передаваемые данные, что делает их уязвимыми для перехвата и модификации.

Anti-Scraping и Captchas:

Нередко сайты на HTTPS используют дополнительные меры безопасности и различные механизмы анти-скрапинга.

Заголовки и Cookies:

Оба протокола позволяют передавать заголовки, однако при работе по HTTPS предоставляется дополнительная безопасность за счет наличия шифрования.

Изменение протокола:

Для сайтов на HTTPS принято добавлять автоматический редирект с HTTP. Такую ситуацию необходимо обрабатывать при помощи добавления нужной логики в код.

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

Для тестирования набора прокси можно использовать код ниже. Предварительно нужно подготовить текстовый файл со списком найденных адресов.

import random
import requests

# Указываем URL, к которому будем отправлять запрос для тестирования прокси
url = 'http://httpbin.org/ip'

# Открываем файл с прокси и читаем его
with open('proxy.txt') as file:
    # Считываем содержимое файла и разделяем его на строки
    proxy_file = file.read().split('\n')
    # Изменяем порядок следования прокси на случайный
    random.shuffle(proxy_file)
    # Перебираем прокси из списка
    for proxy_ in proxy_file:
        try:
            # Берем прокси из списка и удаляем лишние пробелы
            ip = proxy_.strip()
            print(proxy_)
            # Формируем словарь с прокси для http и https
            proxy = {
                'http': f'http://{ip}',
                'https': f'https://{ip}'
            }
            # Выполняем GET-запрос с использованием выбранного прокси
            response = requests.get(url=url, proxies=proxy)
            # Выводим результат в случае успешного подключения
            print(response.json(), 'Success connection')
        except Exception as _ex:
            # В случае неудачи пропускаем текущую итерацию
            continue

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



Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: