Snippet

public

Language: python

Created
Jan 22, 2026 • 11:30 AM
Visibility
public
Raw
1# Minimal HTTP client with token auth and typed responses
2
3import requests
4from typing import Any, Dict, Optional
5
6
7class ApiError(Exception):
8    def __init__(self, status: int, message: str):
9        self.status = status
10        self.message = message
11        super().__init__(f"{status}: {message}")
12
13
14class ApiClient:
15    def __init__(self, base_url: str, token: Optional[str] = None):
16        self.base_url = base_url.rstrip("/")
17        self.token = token
18
19    def set_token(self, token: str):
20        self.token = token
21
22    def get(self, path: str) -> Dict[str, Any]:
23        return self._request("GET", path)
24
25    def post(self, path: str, payload: Optional[dict] = None) -> Dict[str, Any]:
26        return self._request("POST", path, payload)
27
28    def _request(self, method: str, path: str, payload: Optional[dict] = None):
29        url = self.base_url + path
30        headers = {"Content-Type": "application/json"}
31
32        if self.token:
33            headers["Authorization"] = f"Bearer {self.token}"
34
35        resp = requests.request(method, url, json=payload, headers=headers, timeout=10)
36
37        if not resp.ok:
38            raise ApiError(resp.status_code, resp.text)
39
40        return resp.json()
41
42
43# Example usage
44if __name__ == "__main__":
45    api = ApiClient("https://api.pastehub.de", "user-token")
46
47    me = api.get("/me")
48    print("Logged in as", me["username"])
49