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))