Привет, при вызове функции 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()