File size: 968 Bytes
76b253b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# PATH: bot/integrations/http.py
import httpx
from bot.core.settings import HTTP_TIMEOUT_SEC, MAX_RETRIES

_async_client: httpx.AsyncClient | None = None

def get_client() -> httpx.AsyncClient:
    global _async_client
    if _async_client is None:
        _async_client = httpx.AsyncClient(timeout=HTTP_TIMEOUT_SEC, follow_redirects=True)
    return _async_client

async def post_json(url: str, headers: dict, payload: dict) -> dict:
    c = get_client()
    last_err = None
    for _ in range(MAX_RETRIES + 1):
        try:
            r = await c.post(url, headers=headers, json=payload)
            data = r.json() if r.headers.get("content-type","").startswith("application/json") else {}
            if r.status_code >= 400:
                return {"ok": False, "status": r.status_code, "data": data, "text": r.text[:300]}
            return data
        except Exception as e:
            last_err = e
    return {"ok": False, "status": 0, "err": str(last_err)}