Ошибка requests.exceptions.ProxyError при отправлении запроса

Рейтинг: 0Ответов: 1Опубликовано: 16.06.2023

Я использую прокси для доступа к ресурсу. Время от времена ловлю ошибку, что прокси пока не может получить ответ. По этому мне нужно менять прокси. Внизу функция запроса. Как правильно это встроить в код? self.rot=True - значит что пора менять прокси. Как сделать по типу:

if ProxyError
    self.rot=True  

    def post(self, *args, **kwargs):
        while True:
            proxxx=self.proxys["http"]
            response = self.session.post(*args, **kwargs, proxies=self.proxys, verify=False)
            if response.status_code == 200:
                response.close()
                return response
            elif response.status_code == 403:
                if proxxx==self.proxys["http"]:
                    print("403, меняем прокси")
                    self.rot=True
                sleep(1)
            else:
                return exceptions.CheckException(response.text)
    response = self.session.post(*args, **kwargs, proxies=self.proxys, verify=False)
  File "/home/ubuntu/.local/lib/python3.10/site-packages/requests/sessions.py", line 635, in post
    return self.request("POST", url, data=data, json=json, **kwargs)
  File "/home/ubuntu/.local/lib/python3.10/site-packages/requests/sessions.py", line 587, in request
    resp = self.send(prep, **send_kwargs)
  File "/home/ubuntu/.local/lib/python3.10/site-packages/requests/sessions.py", line 701, in send
    r = adapter.send(request, **kwargs)
  File "/home/ubuntu/.local/lib/python3.10/site-packages/requests/adapters.py", line 559, in send
    raise ProxyError(e, request=request)
requests.exceptions.ProxyError: HTTPSConnectionPool(host='service.aminoapps.com', port=443): Max retries exceeded with url: /api/v1/x257597713/s/chat/thread/(Caused by ProxyError('Cannot connect to proxy.', RemoteDisconnected('Remote end closed connection without response')))

Ответы

▲ 0

Можно попробовать обработать данную ошибку через try-except

def post(self, *args, **kwargs):
  list_of_proxies = [...]
  try:
    #Запрос к серверу
    requests.post(list_of_proxies[0])
  except requests.exceptions.ProxyError:
    list_of_proxies.remove(list_of_proxies[0])

В целом логику смены прокси нужно осуществить немного по другому, т.к. по умолчанию будет не массив, а словарь.