Как проверить прокси на валидность?
Пытаюсь проверить прокси из списка «http_proxy» использую следующий код:
from colorama import Fore import requests http_proxy = ["87.107.18.83:8080","104.245.228.65:8080","0.0.0.1:80"] class checker(object): def check(self,x): url='http://google.com' try: requests.get(url,proxies=,timeout=(20.05,27), verify=False) except requests.exceptions.ConnectionError as e: print(Fore.BLUE+'ОШИБКА. ',e) return e except requests.exceptions.ConnectTimeout as e: print(Fore.BLUE+'ОШИБКА. Connection timeout',e) return e except requests.exceptions.HTTPError as e: print(Fore.BLUE+'ОШИБКА. code',e.code) return e.code except requests.exceptions.Timeout as e: print(Fore.BLUE+'ОШИБКА. Connection Timeout!',e) return e except urllib3.exceptions.ProxySchemeUnknown as e: print(Fore.BLUE+'ОШИБКА. ',e) return e c = checker() for i in http_proxy: if c.check(i): print(Fore.RED + 'Bad proxy', i) else: print(Fore.GREEN + 'Good proxy', i)
Получаю ошибки в ответ:
ОШИБКА. HTTPConnectionPool(host='87.107.18.83', port=8080): Max retries exceeded with url: http://google.com/ (Caused by ConnectTimeoutError(, 'Connection to 87.107.18.83 timed out. (connect timeout=20.05)')) Bad proxy 87.107.18.83:8080 ОШИБКА. HTTPConnectionPool(host='104.245.228.65', port=8080): Max retries exceeded with url: http://google.com/ (Caused by ConnectTimeoutError(, 'Connection to 104.245.228.65 timed out. (connect timeout=20.05)')) Bad proxy 104.245.228.65:8080 ОШИБКА. HTTPConnectionPool(host='0.0.0.1', port=80): Max retries exceeded with url: http://google.com/ (Caused by ProxyError('Cannot connect to proxy.', NewConnectionError(': Failed to establish a new connection: [WinError 10051] Сделана попытка выполнить операцию на сокете при отключенной сети'))) Bad proxy 0.0.0.1:80
Первые два прокси из списка валидные.
Если вместо http:// поставить https:// покажет что все прокси валидные.
- Вопрос задан более трёх лет назад
- 4077 просмотров
HTTP-прокси или SOCKS-прокси с модулем requests в Python
Запросы к сайтам через HTTP-прокси или SOCKS-прокси
Содержание:
- Запросы через HTTP-прокси;
- Запросы через SOCKS-прокси.
Запросы через HTTP-прокси.
Если необходимо использовать прокси-сервер для запросов к серверу, то для любого метода запроса можно передавать аргумент proxies , в который необходимо указать список прокси-серверов:
import requests # список прокси-серверов proxies = 'http': 'http://10.10.1.10:3128', 'https': 'http://10.10.1.10:1080', > requests.get('http://example.org', proxies=proxies)
В качестве альтернативы можно настроить список прокси один раз для всего сеанса/сессии:
import requests proxies = 'http': 'http://10.10.1.10:3128', 'https': 'https://10.10.1.10:1080', > session = requests.Session() session.proxies.update(proxies) session.get('http://example.org')
Когда конфигурация прокси-серверов не переопределяется в Python, как показано выше, то по умолчанию библиотека requests полагаются на конфигурацию прокси-сервера, определенную стандартными переменными среды http_proxy , https_proxy , no_proxy и curl_ca_bundle . Также поддерживаются варианты этих переменных в верхнем регистре. Следовательно можно настроить их для использования в запросах (только те, которые соответствуют вашим потребностям):
$ export HTTP_PROXY="http://10.10.1.10:3128" $ export HTTPS_PROXY="https://10.10.1.10:1080" $ python3 >>> import requests >>> requests.get('http://example.org')
Чтобы использовать HTTP Basic Auth с прокси, необходимо использовать синтаксис http://user:password@host/ в любой из приведенных выше записей конфигурации:
# через переменные среды $ export HTTPS_PROXY="http://user:pass@10.10.1.10:1080" # в коде Python >>> proxies = 'http': 'http://user:pass@10.10.1.10:3128/'>
Предупреждение. Хранение конфиденциальной информации в открытом виде об имени пользователя и пароле в переменных средах или файле с кодом представляет собой угрозу безопасности и настоятельно не рекомендуется.
Чтобы предоставить прокси-сервер для конкретной схемы и хоста, используйте форму scheme://hostname для ключа. Это будет соответствовать для любого запроса заданной схеме и точному имени хоста.
proxies = 'http://10.20.1.128': 'http://10.10.1.10:5323'>
Обратите внимание, что URL-адреса прокси должны включать схему.
Наконец, обратите внимание, что использование прокси-сервера для HTTPS-соединений обычно требует, чтобы локальный компьютер доверял корневому сертификату прокси. По умолчанию список сертификатов, которым доверяют запросы, можно найти с помощью:
from requests.utils import DEFAULT_CA_BUNDLE_PATH print(DEFAULT_CA_BUNDLE_PATH)
Можно переопределить этот набор сертификатов по умолчанию, установив для стандартной переменной среды curl_ca_bundle другой путь к файлу:
# переопределяем набор сертификатов через переменные среды $ export curl_ca_bundle="/usr/local/myproxy_info/cacert.pem" $ export https_proxy="http://10.10.1.10:1080" # запускаем Python $ python3 >>> import requests # делаем запрос >>> requests.get('https://example.org')
Запросы через SOCKS-прокси.
Новое в версии 2.10.0.
Помимо основных HTTP-прокси, библиотека requests также поддерживает прокси, использующие протокол SOCKS. Это дополнительная функция, для которой перед использованием необходимо установить дополнительные сторонние библиотеки.
Вы можете получить зависимости для этой функции из pip:
$ python -m pip install requests[socks]
После того как установили эти зависимости, использовать SOCKS-прокси так же просто, как и HTTP-прокси:
# просто аргументу proxies необходимо # передать список SOCKS-прокси proxies = 'http': 'socks5://user:pass@host:port', 'https': 'socks5://user:pass@host:port' >
Использование схемы socks5 приводит к тому, что разрешение DNS происходит на клиенте, а не на прокси-сервере. Это соответствует утилите linux терминала curl , которая использует схему, чтобы решить, следует ли выполнять разрешение DNS на клиенте или прокси-сервере. Если необходимо разрешение DNS на прокси-сервере, то используйте socks5h в качестве схемы.
- КРАТКИЙ ОБЗОР МАТЕРИАЛА.
- GET и POST запросы c модулем requests
- Получение/отправка заголовков сервера модулем requests
- Извлечение и установка cookies с модулем requests
- Сессии/сеансы Session() модуля requests
- Объект ответа сервера Response модуля requests
- Получение и отправка данных в виде JSON с модулем requests
- Установка timeout для модуля requests
- Объект PreparedRequest модуля requests
- Загрузка файлов на сервер модулем requests
- Загрузка больших данных модулем requests
- HTTP-прокси или SOCKS-прокси с модулем requests
- Использование хуков модуля requests
- Аутентификация с модулем requests
- SSL и модуль requests
Как проверить прокси на работоспасобность с помощю Python
У меня проблема с моей страной. У моей страны жесткий контроль Интернета. Практический все VPN не работают. Но обхожу блокировку с помощью Proxifier, но и для него надо: собирать список прокси и каждую отдельно проверять. Это занимает ужасно много времени. Я решил все это ускорить с помощью python. У меня пока знания языка и представление о сетях начальный уровень. По этому если знаете как это можно реализовать помогите пожалуйста.
Отслеживать
18 1 1 бронзовый знак
задан 23 июн в 4:44
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
import requests proxies = < 'http': 'http://10.10.10.10:3333', 'https': 'http://10.10.10.10:8888', >response=requests.get('http://example.org любой сайт для проверки' , proxies=proxies) if response.status_code == 200: print('Success!')
Можно из файла подставлять список адресов и портов
Отслеживать
ответ дан 23 июн в 5:49
2,100 1 1 золотой знак 8 8 серебряных знаков 9 9 бронзовых знаков
- python
- сеть
- proxy
-
Важное на Мете
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.10.27.43697
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Простая проверка прокси на python
Когда-то я пытался размещать и парсить МНОГО объявлений на всем известной доске объявлений Авито. Так как аккаунты уже начали активно банить, я пытался как-то этого избежать и первое что пришло мне в голову — менять IP адрес. Для этого я решил найти бесплатные и не очень прокси, но оказалось что не один я такой умный, и авито активно банил IP-адреса проксей, с которых пытались массово постить объявления. В итоге, я пришел к тому что можно проверять доступность авито через прокси, для этого был написан простой скрипт на python, код которого я привожу ниже.
# coding=utf-8
from grab import Grab
g = Grab()
f = open(‘proxylist.txt’) # мой сырой список прокси
av = open(‘goodproxy.txt’, ‘w’) # прокси через которые виден авито
num_lines = sum(1 for line in f)
print (‘Proxies in file: ‘ + str(num_lines))
f.close()
with open(‘proxylist.txt’) as f:
mylist = [line.rstrip(‘\n’) for line in f]
cycle = 0
while cycle < num_lines:
s = mylist[cycle]
try:
g.setup(proxy=s)
g.go(‘http://avito.ru‘)
print
av.write(s+’\n’)
print (s +’ – ok [‘+str(cycle)+’|’+str(num_lines)+’] ‘+g.doc.select(‘//title’).text().encode(‘utf-8’))
except Exception as inst:
print (s +’ – ‘+ str(inst) +’ [‘+str(cycle)+’|’+str(num_lines)+’]’)
cycle += 1
print (‘Done’)
В кратце: скрипт читает файл proxylist.txt, в котором содержится список полученных мною прокси, так-же открывает файл goodproxy.txt — в него записываются отфильтрованные адреса прокси, через которые виден авито.
Если у Вас возникли вопросы по работе скрипта, пишите в комментарии, я обязательно отвечу.