import requests import logging class NasToolsClient: def __init__(self, base_url, api_key=None): self.base_url = base_url self.api_key = api_key self.token = None # def login(self, username, password): # """ # 登录以获取Token # """ # url = f'{self.base_url}/api/v1/user/login' # data = {'username': username, 'password': password} # headers = {'Content-Type': 'application/x-www-form-urlencoded'} # response = requests.post(url, data=data, headers=headers) # if response.status_code == 200: # self.token = response.json().get('token') # return self.token # else: # raise Exception("Login failed with status code: " + str(response.status_code)) def login(self, username, password): """登录并获取令牌""" url = f'{self.base_url}/api/v1/user/login' data = { "username": username, "password": password } headers = {'Content-Type': 'application/x-www-form-urlencoded'} response = requests.post(url, data=data, headers=headers) if response.status_code == 200: self.token = response.json().get("data", {}).get("token") logging.info(self.token) logging.info(self.api_key) return self.token else: raise Exception("Failed to login:", response.text) def get(self, endpoint): """执行带有令牌的 GET 请求""" url = f"{self.base_url}{endpoint}" headers = { "Authorization": f"Bearer {self.token}" if self.token else f"ApiKey {self.api_key}" } response = requests.get(url, headers=headers) if response.status_code == 200: return response.json() else: raise Exception("Failed to get data:", response.text) def sync_list(self): """ 同步目录 """ url = f'{self.base_url}/api/v1/sync/directory/list' # {"Bearer Auth": {"type": "apiKey", "name": "Authorization", "in": "header"}} headers = { 'accept': 'application/json', 'Content-Type': 'application/x-www-form-urlencoded', "Authorization": f"{self.token}", } logging.info(f"headers: {headers}") params = { 'apikey': self.api_key } response = requests.post(url, params=params, headers=headers) logging.info(response.json()) return response.json() def sync(self, sid): """ 同步目录 {cmd: "run_directory_sync", data: {sid: []}} """ url = f'{self.base_url}/api/v1/sync/directory/run' # {"Bearer Auth": {"type": "apiKey", "name": "Authorization", "in": "header"}} headers = { 'accept': 'application/json', 'Content-Type': 'application/x-www-form-urlencoded', "Authorization": f"{self.token}", } logging.info(f"headers: {headers}") params = { 'apikey': self.api_key, 'sid': sid } response = requests.get(url, params=params, headers=headers) logging.info(response.json()) return response.json() def run_service(self, service_name): """ 运行指定的服务 """ url = f'{self.base_url}/api/v1/service/run' # {"Bearer Auth": {"type": "apiKey", "name": "Authorization", "in": "header"}} headers = { 'accept': 'application/json', 'Content-Type': 'application/x-www-form-urlencoded', 'security': self.api_key, "Authorization": f"{self.token}", } logging.info(f"headers: {headers}") payload = {'item': service_name} response = requests.post(url, data=payload, headers=headers) logging.info(response.json()) return response.json() # # 使用示例 # base_url = "http://your-nas-tools-address/api/v1" # username = "your_username" # password = "your_password" # api_key = "your_api_key" # # client = NasToolsClient(base_url, api_key) # token = client.login(username, password) # print("Token:", token) # # # 现在可以使用 client.get 方法来调用其他 API