Задать вопрос
@stulevtoday
Дурак, глупо, но самокритично.

С чем связана ошибка Socket error: 502: Bad Gateway в httplib2?

Привет, при вызове функции make_request_with_retry возникает ошибка Socket error: 502: Bad Gateway. Но с добавлением в httplib2.Http(timeout=5) ошибка меняется на Socket error: timed out. При чём данные ошибки возникают только с одним сайтом Используется несколько прокси и каждый раз, разные прокси не могут до него пробиться. Есть ли варианты решения проблемы?
import httplib2
import boto3
import sqlite3
import os
import random
from time import sleep


def make_request_with_retry(http_obj, url):
    while True:
        try:
            response, content = http_obj.request(url, 'GET')
            # Проверяем успешность выполнения запроса
            if response.status == 200:
                return response, content
        except Exception as e:
            print(f"Ошибка при выполнении запроса: {e}")

        # Ждем некоторое время перед повторным запросом
        sleep(3)


def download_image(hs, url, filename, k):
    success = False
    while not success:
        rand = random.randint(0, len(hs) - 1)
        h = hs[rand]
        print(f'{k}. PROXY = {rand}')

        try:
            sleep(3)
            response, content = make_request_with_retry(h, url)
        except:
            print(f'Прокси {rand} была отключена')
            hs.remove(h)
            sleep(3)
            continue

        if response.status == 200:
            out = open(filename, 'wb')
            out.write(content)
            out.close()
            success = True
    return success


def main():
    ld = os.listdir('D:\\drom_v2\\pics_database')

    hs = [
      httplib2.Http('.cache', #timeout=5,
                    proxy_info=httplib2.ProxyInfo(httplib2.socks.PROXY_TYPE_HTTP,
                                                  proxy_host='*',
                                                  proxy_port=*,
                                                  proxy_user='*',
                                                  proxy_pass='*'))]

    con = sqlite3.connect('database')
    cursor = con.cursor()

    pics = cursor.execute('''SELECT id, url, multi FROM pics''').fetchall()

        len_ = len(pics)

        for i in range(len_):
            id = pics[i][0]
            url = pics[i][1]
            extension = '.' + url.split('.')[-1]
            filename = url.split('/')[-1].replace(extension, '')
            url_ = url[:-(len(filename) + len(extension))]
            multi = pics[i][2]

            if id + '_1.jpg' not in ld and url != '':
                print(id, url)

                if len(filename) == 1:
                    filename = int(filename)
                    k = 1

                    for j in range(filename, multi + 1):
                        try:
                            success = download_image(hs, url_ + str(j) + extension, f'D:\\drom_v2\\pics_database\\{id}_{k}.jpg', k)
                            cursor.execute('''UPDATE ids SET is_server=? WHERE id=?''', ('y', id))
                            k += 1
                        except Exception as ex:
                            cursor.execute('''UPDATE ids SET is_server=? WHERE id=?''', ('n', id))
                            print(ex)

    con.commit()
    con.close()


if __name__ == "__main__":
    main()
  • Вопрос задан
  • 122 просмотра
Подписаться 1 Простой 9 комментариев
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
22 дек. 2024, в 20:40
10000 руб./за проект
22 дек. 2024, в 20:34
3000 руб./за проект
22 дек. 2024, в 20:12
10000 руб./за проект