# -*- coding: utf-8 -*-
"""
=============================================================
  CSDN识别 Demo (Python版)

  功能说明：
  提交CSDN验证码识别任务（目前支持文字点选）

  使用方法：
  1. 安装依赖：pip install requests
  2. 将下方的 APPKEY 替换为你自己的用户密钥
  3. 将 CSDN_COOKIE 替换为你获取到的 waf_captcha_marker cookie值
  4. 运行脚本：python recognize_csdn.py
=============================================================
"""

import requests
import json
import sys

# ======================== 配置区域（请替换为你自己的参数）========================
# 用户密钥，登录平台后获取
APPKEY = "你的appkey"

# CSDN验证码的 waf_captcha_marker cookie字段值（从浏览器抓包获取）
CSDN_COOKIE = "你获取到的cookie"

# 项目类型，CSDN固定填写 600（特殊类型请联系客服）
ITEM_ID = 600

# 可选参数：代理IP（格式示例：http://IP:端口，若需白名单支持请联系客服。http://账号:密码@proxy.com:8080 或 socks5://127.0.0.1:9888）
PROXY = ""

# 可选参数：开发者密钥（如果有的话填写）
DEVKEY = ""

# 可选参数：User-Agent（如果需要的话填写）
UA = ""
# ===============================================================================

# API基础地址
API_BASE = "http://api.ttocr.com/api"


def recognize_csdn():
    """
    提交CSDN验证码识别任务
    接口地址：POST http://api.ttocr.com/api/recognize2
    必填参数：appkey, cookie, itemid(固定600)
    可选参数：proxy, devkey, ua
    重要提示：如果提交结果失败无法通过，请将结果URL编码后提交
    """
    print("=" * 50)
    print("[CSDN识别] 正在提交CSDN识别任务...")
    print("=" * 50)
    url = f"{API_BASE}/recognize2"
    post_data = {
        "appkey": APPKEY,
        "cookie": CSDN_COOKIE,
        "itemid": ITEM_ID,
    }
    # 如果设置了代理，则添加代理参数
    if PROXY:
        post_data["proxy"] = PROXY
    # 如果设置了开发者密钥，则添加
    if DEVKEY:
        post_data["devkey"] = DEVKEY
    # 如果设置了UA，则添加
    if UA:
        post_data["ua"] = UA
    print(f"[请求参数] cookie={CSDN_COOKIE[:20]}..." if len(CSDN_COOKIE) > 20 else f"[请求参数] cookie={CSDN_COOKIE}")
    print(f"[请求参数] itemid={ITEM_ID}")
    try:
        response = requests.post(url, data=post_data, timeout=60)
        result = response.json()
        if result.get("status") == 1:
            print(f"[成功] 识别成功！耗时：{result.get('time')}ms")
            print(f"[识别结果] {result.get('data')}")
        else:
            print(f"[失败] 识别失败，错误信息：{result.get('msg')}")
            print(f"[提示] 错误状态码：{result.get('status')}，请参考错误代码表排查")
        print(f"\n[完整响应] {json.dumps(result, ensure_ascii=False, indent=2)}")
        return result
    except requests.exceptions.RequestException as e:
        print(f"[异常] 网络请求出错：{e}")
        return None


if __name__ == "__main__":
    print("*" * 60)
    print("  CSDN识别 Demo (Python版)")
    print("*" * 60)
    if APPKEY == "你的appkey":
        print("\n[错误] 请先在脚本顶部的配置区域填写你的 APPKEY")
        sys.exit(1)
    if CSDN_COOKIE == "你获取到的cookie":
        print("\n[错误] 请先在脚本顶部的配置区域填写 CSDN_COOKIE")
        sys.exit(1)
    recognize_csdn()
    print("\n" + "=" * 50)
    print("[完成] 识别执行完毕")
    print("=" * 50)

