api_client.py 1.2 KB

123456789101112131415161718192021222324252627282930313233
  1. import json
  2. import urllib.request
  3. class JsonTransport:
  4. def post_json(self, url, payload, headers, timeout):
  5. request = urllib.request.Request(
  6. url=url,
  7. data=json.dumps(payload).encode('utf-8'),
  8. headers=dict({'Content-Type': 'application/json'}, **headers),
  9. method='POST',
  10. )
  11. with urllib.request.urlopen(request, timeout=timeout) as response:
  12. return json.loads(response.read().decode('utf-8-sig'))
  13. class ApiClient:
  14. def __init__(self, base_url, token_store, transport=None, timeout=10):
  15. self.base_url = (base_url or '').rstrip('/')
  16. self.token_store = token_store
  17. self.transport = transport or JsonTransport()
  18. self.timeout = int(timeout)
  19. def call_tool(self, tool_code, route_path, payload, request_id):
  20. token = self.token_store.require_token()
  21. url = self.base_url + '/' + route_path.lstrip('/')
  22. headers = {
  23. 'Authorization': 'Bearer {0}'.format(token),
  24. 'X-MCP-Tool-Code': tool_code,
  25. 'X-Request-Id': request_id,
  26. }
  27. return self.transport.post_json(url, payload, headers, self.timeout)