Загрузка данных


import os
import http.client
import mimetypes
import uuid
import ssl

# --- НАСТРОЙКИ ---
FOLDER_PATH = "Ready_To_Upload"
SERVER_HOST = "main.atb.su"
API_ENDPOINT = "/api/v1/documents"
AUTH_TOKEN = "Bearer ТВОЙ_ТОКЕН"

# Пути к сертификатам (из твоего списка файлов)
CERT_FILE = "gigachat_user.pem"
KEY_FILE = "gigachat_user.key"
# -----------------

def upload_file(path):
    name = os.path.basename(path)
    mime, _ = mimetypes.guess_type(path)
    mime = mime or 'application/octet-stream'
    boundary = uuid.uuid4().hex

    with open(path, 'rb') as f:
        content = f.read()

    body = (
        f"--{boundary}\r\n"
        f'Content-Disposition: form-data; name="file"; filename="{name}"\r\n'
        f"Content-Type: {mime}\r\n\r\n"
    ).encode('utf-8') + content + f"\r\n--{boundary}--\r\n".encode('utf-8')

    headers = {
        "Authorization": AUTH_TOKEN,
        "Content-Type": f"multipart/form-data; boundary={boundary}",
        "Content-Length": str(len(body))
    }

    # СОЗДАЕМ КОНТЕКСТ С СЕРТИФИКАТАМИ
    context = ssl.create_default_context()
    
    # verify=False аналог (отключаем проверку серверного сертификата, если нужно)
    context.check_hostname = False
    context.verify_mode = ssl.CERT_NONE
    
    # Прокидываем твои клиентские сертификаты
    context.load_cert_chain(certfile=CERT_FILE, keyfile=KEY_FILE)

    # Используем контекст при подключении
    conn = http.client.HTTPSConnection(SERVER_HOST, context=context)
    try:
        conn.request("POST", API_ENDPOINT, body=body, headers=headers)
        res = conn.getresponse()
        print(f"[{res.status}] {name}: {res.reason}")
    except Exception as e:
        print(f"Ошибка {name}: {e}")
    finally:
        conn.close()

# Запуск тот же самый
if __name__ == "__main__":
    if not os.path.exists(FOLDER_PATH):
        print(f"Папка {FOLDER_PATH} не найдена!")
    else:
        files = [f for f in os.listdir(FOLDER_PATH)]
        print(f"Найдено файлов: {len(files)}. Начинаю загрузку с сертификатами...")
        for i, f_name in enumerate(files, 1):
            print(f"({i}/{len(files)}) ", end="")
            upload_file(os.path.join(FOLDER_PATH, f_name))