Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > Python
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.07.2023, 17:35   #1
3frenky3
Новичок
Джуниор
 
Регистрация: 14.07.2023
Сообщений: 2
По умолчанию Бекконект прокси, время ожидания ответа

Добрый день. Проблема не очень сложная но найти решение не могу.

Код:
def main_request(data, proxy='', type_of_proxy='socks5', user_agent='Mozilla/5.0 (Linux; arm; Android 13; PEPM00) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.141 YaBrowser/22.3.6.61.00 SA/3 Mobile Safari/537.36'):
 
class TimeoutHTTPAdapter(HTTPAdapter):
    def __init__(self, *args, **kwargs):
        if "timeout" in kwargs:
            self.timeout = kwargs["timeout"]
            del kwargs["timeout"]
        super().__init__(*args, **kwargs)

    def send(self, request, **kwargs):
        timeout = kwargs.get("timeout")
        if timeout is None and hasattr(self, 'timeout'):
            kwargs["timeout"] = self.timeout
        return super().send(request, **kwargs)

s = requests.Session()
 
 
s.mount('http://', TimeoutHTTPAdapter(timeout=5))  # 5 seconds
s.mount('https://', TimeoutHTTPAdapter(timeout=5))
 
retry = Retry(connect=3, backoff_factor=0.7)
adapter = HTTPAdapter(max_retries=retry)
s.mount('http://', adapter)
s.mount('https://', adapter)
 
if type_of_proxy == 'socks5':
    timeout_request = 3
elif type_of_proxy == 'http':
    timeout_request = 1
 
proxies = {
                'http': f'{type_of_proxy}://{proxy}',
                'https': f'{type_of_proxy}://{proxy}'
            }
 
page_login = s.post('https://my-site.com', data=data_1.encode('utf-8'), verify=False,
                                proxies=proxies, headers=headers_dic,timeout=timeout_request)
 
print(main_request(data='1',proxy='login:pass@backconnect.proxy.com:16000',type_of_proxy='http'))
Проблема заключается в том, что когда идет запрос я жду ответ от 10 до 120 секунд. Иногда приходит в первые 3 секунды.
Как мне поставить ограничитель на ожидание ответа? Я уже все перепробовал.

С socks5 все работает как надо.

После 5 минут вот такая ошибка

ProxyError(MaxRetryError("HTTPSConn ectionPool(host='https://my-site.com', port=443): Max retries exceeded with url: / (Caused by ProxyError('Cannot connect to proxy.', timeout('timed out')))"))]

Последний раз редактировалось 3frenky3; 14.07.2023 в 19:22. Причина: Правка текста
3frenky3 вне форума Ответить с цитированием
Старый 14.07.2023, 19:30   #2
3frenky3
Новичок
Джуниор
 
Регистрация: 14.07.2023
Сообщений: 2
По умолчанию

Цитата:
Сообщение от 3frenky3 Посмотреть сообщение
Добрый день. Проблема не очень сложная но найти решение не могу.

Код:
def main_request(data, proxy='', type_of_proxy='socks5', user_agent='Mozilla/5.0 (Linux; arm; Android 13; PEPM00) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.141 YaBrowser/22.3.6.61.00 SA/3 Mobile Safari/537.36'):
 
class TimeoutHTTPAdapter(HTTPAdapter):
    def __init__(self, *args, **kwargs):
        if "timeout" in kwargs:
            self.timeout = kwargs["timeout"]
            del kwargs["timeout"]
        super().__init__(*args, **kwargs)

    def send(self, request, **kwargs):
        timeout = kwargs.get("timeout")
        if timeout is None and hasattr(self, 'timeout'):
            kwargs["timeout"] = self.timeout
        return super().send(request, **kwargs)

s = requests.Session()
 
 
s.mount('http://', TimeoutHTTPAdapter(timeout=5))  # 5 seconds
s.mount('https://', TimeoutHTTPAdapter(timeout=5))
 
retry = Retry(connect=3, backoff_factor=0.7)
adapter = HTTPAdapter(max_retries=retry)
s.mount('http://', adapter)
s.mount('https://', adapter)
 
if type_of_proxy == 'socks5':
    timeout_request = 3
elif type_of_proxy == 'http':
    timeout_request = 1
 
proxies = {
                'http': f'{type_of_proxy}://{proxy}',
                'https': f'{type_of_proxy}://{proxy}'
            }
 
page_login = s.post('https://my-site.com', data=data_1.encode('utf-8'), verify=False,
                                proxies=proxies, headers=headers_dic,timeout=timeout_request)
 
print(main_request(data='1',proxy='login:pass@backconnect.proxy.com:16000',type_of_proxy='http'))
Проблема заключается в том, что когда идет запрос я жду ответ от 10 до 120 секунд. Иногда приходит в первые 3 секунды.
Как мне поставить ограничитель на ожидание ответа? Я уже все перепробовал.

С socks5 все работает как надо.

После 5 минут вот такая ошибка

ProxyError(MaxRetryError("HTTPSConn ectionPool(host='https://my-site.com', port=443): Max retries exceeded with url: / (Caused by ProxyError('Cannot connect to proxy.', timeout('timed out')))"))]
Проблема решена! Если кому-то пригодится, вот работающий код:

Код:
def main_request(data, proxy='', type_of_proxy='socks5', user_agent='Mozilla/5.0 (Linux; arm; Android 13; PEPM00) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.141 YaBrowser/22.3.6.61.00 SA/3 Mobile Safari/537.36'):
 
class TimeoutHTTPAdapter(HTTPAdapter):
    def __init__(self, *args, **kwargs):
        if "timeout" in kwargs:
            self.timeout = kwargs["timeout"]
            del kwargs["timeout"]
        super().__init__(*args, **kwargs)
 
    def send(self, request, **kwargs):
        timeout = kwargs.get("timeout")
        if timeout is None and hasattr(self, 'timeout'):
            kwargs["timeout"] = self.timeout
        return super().send(request, **kwargs)
  
s = requests.Session()
  
 s.mount('http://', TimeoutHTTPAdapter(timeout=5))  # 5 seconds
s.mount('https://', TimeoutHTTPAdapter(timeout=5))
  
  
proxies = {
                'http': f'{type_of_proxy}://{proxy}',
                'https': f'{type_of_proxy}://{proxy}'
            }
  
page_login = s.post('https://my-site.com', data=data_1.encode('utf-8'), verify=False,
                                proxies=proxies, headers=headers_dic,timeout=timeout_request)
  
print(main_request(data='1',proxy='login:pass@backconnect.proxy.com:16000',type_of_proxy='http'))
3frenky3 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Время ожидания подключения к БД Pavlov_yu Microsoft Office Excel 0 27.02.2015 05:31
Истекло время ожидания (Timeout). Время ожидания истекло до завершения операции или сервер не отвечает. kgs_forum C# (си шарп) 1 20.08.2013 20:14
Время ожидания истекло Swatch Microsoft Office Access 3 05.12.2012 13:06
Большое время ожидания ответа сервера pest11 БД в Delphi 9 29.03.2012 08:16
увеличение времени ожидания ответа от SQL Server furstenberg БД в Delphi 12 29.07.2009 15:41