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

  • Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Проблема с Proxy на Python

Muxtar

Green Team
02.06.2021
132
64
BIT
0
Доброго времени суток.. давно тут не заходил были дела. В общем у меня вопрос я написал код который делает запрос на 2ip.ru и выводит мне информацию(айпи, локейщен и т.п). Как отправить запрос на каком либо сайте используя proxy?

Вот пример кода:


Python:
import requests
from bs4 import BeautifulSoup


headers = {
  
    "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36"
}

proxies = {
    "https": "https://ip:port" # Именно проблема с этим куском
}

def get_location(url):
    response = requests.get(url=url, headers=headers, proxies=proxies)
    soup = BeautifulSoup(response.text, 'lxml')

    location = soup.find("div", class_="value-country").text.strip()
    ip = soup.find("div", class_="ip").text.strip()
    print(f"IP: {ip}\nLocation: {location}")
def main():
    get_location(url="https://2ip.ru")

if __name__ == '__main__':
    main()

Я создал словарь proxies где будет сам прокси но не работает выводит сразу ошибку а некоторые работает очень долго не каких реакций.
С парсером всё круто работает ну вот прокси нет... Можете помочь? -Спасибо
 

INPC

Grey Team
21.08.2019
77
161
BIT
135
Что за ошибку выводит?
Попробовал ваш скрипт, вероятнее всего проблема в прокси, у меня было 3 основных ошибки:
1)
Python:
ValueError: check_hostname requires server_hostname
Решилось апдейтом urllib3:
pip3 install urllib3==1.25.8

2)
Python:
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='2ip.ru', port=443): Max retries exceeded with url: / (Caused by ProxyError('Cannot connect to proxy.', OSError('Tunnel connection failed: 503 unknown method')))

Тут уже сложнее, вероятно проблема в прокси, рекомендую проверять через curl, если ошибка есть - прокси не валидный (скорее всего)
curl --proxy https://<proxy>:<port>

3)
Python:
urllib3.exceptions.NewConnectionError: <urllib3.connection.VerifiedHTTPSConnection object at 0x7fe4d085e2b0>: Failed to establish a new connection: [Errno 111] Connection refused

Тут, я решил проблему отключением проверки сертификата (verify=False) P.S. не правильно конечно, но что делать...:
response = requests.get(url=url, headers=headers, proxies=proxies, verify=False)

Подрубил burp и проверил не его проксе, результат - все работает, вывод - не в коде проблема.
Если проблема не в коде, то значит - в прокси, больше тут ломаться нечему, на мой взгляд.

Вот код целиком, если что:
Python:
import requests
from bs4 import BeautifulSoup

headers = {

    "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36"
}

prox = "127.0.0.1:8080"
proxies = {
  "http": "http://" + prox,
  "https": "https://" + prox,
  "ftp": prox,
}

def get_location(url):
    response = requests.get(url=url, headers=headers, proxies=proxies, verify=False)
    soup = BeautifulSoup(response.text, 'lxml')

    location = soup.find("div", class_="value-country").text.strip()
    ip = soup.find("div", class_="ip").text.strip()
    print(f"IP: {ip}\nLocation: {location}")


def main():
    get_location(url="https://2ip.ru")

if __name__ == '__main__':
    main()
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!