| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- import json
- import sys
- from pathlib import Path
- from typing import Optional
- import requests
- from log_util import get_logger, log_request
- from session_state import get_sess_key
- ROOT = Path(__file__).resolve().parent
- CONFIG_PATH = ROOT / "config.json"
- def load_config():
- if not CONFIG_PATH.exists():
- raise FileNotFoundError(f"配置文件未找到: {CONFIG_PATH}")
- with open(CONFIG_PATH, "r", encoding="utf-8") as f:
- return json.load(f)
- def del_acl_rule(rule_id: int, timeout: int = 10):
- """Send ACL delete POST. Returns requests.Response and parsed JSON data.
- rule_id: The ID of the ACL rule to delete (required).
- """
- cfg = load_config()
- base = cfg.get("base_url", "").rstrip("/")
- url = f"{base}/Action/call"
- data = {
- "func_name": "acl",
- "action": "del",
- "param": {
- "id": rule_id
- }
- }
- logger = get_logger("del_acl_post")
- # Get sess_key from global state
- sess_key = get_sess_key()
- if not sess_key:
- raise ValueError("未找到 sess_key,请先登录")
- cookies = {"sess_key": sess_key.split("=")[1].rstrip(";")} # Extract value from "sess_key=value;"
- logger.debug(f"准备发送请求,URL: {url}")
- resp = requests.post(url, json=data, cookies=cookies, timeout=timeout)
- # 记录请求/响应
- try:
- log_request(logger, "del_acl_rule", url, data, resp)
- except Exception:
- logger.exception("记录请求/响应失败")
- # Parse JSON response
- try:
- json_data = resp.json()
- except ValueError:
- json_data = None
- return resp, json_data
- def main():
- logger = get_logger("main")
- try:
- # Example: Delete ACL rule with ID 14
- resp, data = del_acl_rule(rule_id=14)
- except FileNotFoundError as e:
- logger.error(f"配置错误: {e}")
- sys.exit(2)
- except ValueError as e:
- logger.error(f"会话错误: {e}")
- sys.exit(3)
- except requests.RequestException as e:
- logger.error(f"请求失败: {e}")
- sys.exit(1)
- # 控制台友好输出
- logger.info(f"状态: {resp.status_code}")
- if data:
- try:
- pretty = json.dumps(data, ensure_ascii=False, indent=2)
- logger.info(f"响应 JSON:\n{pretty}")
- print(pretty)
- except Exception:
- logger.info(f"响应文本: {resp.text}")
- print(resp.text)
- else:
- logger.info(f"响应文本: {resp.text}")
- print(resp.text)
- if __name__ == "__main__":
- main()
|