del_acl_post.py 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. import json
  2. import sys
  3. from pathlib import Path
  4. from typing import Optional
  5. import requests
  6. from log_util import get_logger, log_request
  7. from session_state import get_sess_key
  8. ROOT = Path(__file__).resolve().parent
  9. CONFIG_PATH = ROOT / "config.json"
  10. def load_config():
  11. if not CONFIG_PATH.exists():
  12. raise FileNotFoundError(f"配置文件未找到: {CONFIG_PATH}")
  13. with open(CONFIG_PATH, "r", encoding="utf-8") as f:
  14. return json.load(f)
  15. def del_acl_rule(rule_id: int, timeout: int = 10):
  16. """Send ACL delete POST. Returns requests.Response and parsed JSON data.
  17. rule_id: The ID of the ACL rule to delete (required).
  18. """
  19. cfg = load_config()
  20. base = cfg.get("base_url", "").rstrip("/")
  21. url = f"{base}/Action/call"
  22. data = {
  23. "func_name": "acl",
  24. "action": "del",
  25. "param": {
  26. "id": rule_id
  27. }
  28. }
  29. logger = get_logger("del_acl_post")
  30. # Get sess_key from global state
  31. sess_key = get_sess_key()
  32. if not sess_key:
  33. raise ValueError("未找到 sess_key,请先登录")
  34. cookies = {"sess_key": sess_key.split("=")[1].rstrip(";")} # Extract value from "sess_key=value;"
  35. logger.debug(f"准备发送请求,URL: {url}")
  36. resp = requests.post(url, json=data, cookies=cookies, timeout=timeout)
  37. # 记录请求/响应
  38. try:
  39. log_request(logger, "del_acl_rule", url, data, resp)
  40. except Exception:
  41. logger.exception("记录请求/响应失败")
  42. # Parse JSON response
  43. try:
  44. json_data = resp.json()
  45. except ValueError:
  46. json_data = None
  47. return resp, json_data
  48. def main():
  49. logger = get_logger("main")
  50. try:
  51. # Example: Delete ACL rule with ID 14
  52. resp, data = del_acl_rule(rule_id=14)
  53. except FileNotFoundError as e:
  54. logger.error(f"配置错误: {e}")
  55. sys.exit(2)
  56. except ValueError as e:
  57. logger.error(f"会话错误: {e}")
  58. sys.exit(3)
  59. except requests.RequestException as e:
  60. logger.error(f"请求失败: {e}")
  61. sys.exit(1)
  62. # 控制台友好输出
  63. logger.info(f"状态: {resp.status_code}")
  64. if data:
  65. try:
  66. pretty = json.dumps(data, ensure_ascii=False, indent=2)
  67. logger.info(f"响应 JSON:\n{pretty}")
  68. print(pretty)
  69. except Exception:
  70. logger.info(f"响应文本: {resp.text}")
  71. print(resp.text)
  72. else:
  73. logger.info(f"响应文本: {resp.text}")
  74. print(resp.text)
  75. if __name__ == "__main__":
  76. main()