123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- 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
|