fix(DLPilot): publish_gitea 请求自动重试(实例 TLS 间歇性 SSL EOF)

This commit is contained in:
2026-09-14 15:12:16 +08:00
parent 32d0d26c5a
commit df6a5f4343
+17 -9
View File
@@ -23,6 +23,7 @@ import re
import ssl import ssl
import subprocess import subprocess
import sys import sys
import time
import urllib.error import urllib.error
import urllib.request import urllib.request
import uuid import uuid
@@ -59,15 +60,22 @@ class Api:
self.headers = {'Authorization': f'token {token}'} self.headers = {'Authorization': f'token {token}'}
self.ctx = ssl._create_unverified_context() if insecure else None self.ctx = ssl._create_unverified_context() if insecure else None
def request(self, method, path, data=None, headers=None): def request(self, method, path, data=None, headers=None, retries=4):
req = urllib.request.Request(self.api + path, data=data, method=method, """发请求; 实例 TLS 间歇性抽风(SSL UNEXPECTED_EOF), 连接级错误自动重试"""
headers={**self.headers, **(headers or {})}) last = None
try: for attempt in range(retries):
with urllib.request.urlopen(req, context=self.ctx) as resp: req = urllib.request.Request(self.api + path, data=data, method=method,
body = resp.read() headers={**self.headers, **(headers or {})})
return resp.status, json.loads(body) if body else None try:
except urllib.error.HTTPError as e: with urllib.request.urlopen(req, context=self.ctx) as resp:
return e.code, json.loads(e.read() or b'{}') body = resp.read()
return resp.status, json.loads(body) if body else None
except urllib.error.HTTPError as e:
return e.code, json.loads(e.read() or b'{}')
except (urllib.error.URLError, ssl.SSLError, OSError) as e:
last = e
time.sleep(1.0 + attempt)
raise RuntimeError(f'Gitea 请求连续 {retries} 次失败: {last}')
def get_json(self, path): def get_json(self, path):
status, data = self.request('GET', path) status, data = self.request('GET', path)