文档中心 / CSDN

CSDN 对接示例

分组CSDN 入口返回首页

CSDN 对接示例支持直接在线查看、复制和下载源码,无需再下载压缩包。

对接示例

按语言环境展开查看代码,支持直接复制和下载源码。

PHP

共 2 个示例,按接口动作拆分。

该语言注意事项

跟随当前语言展示
  • ============================================================== CSDN识别 对接示例 — PHP版 使用说明 ============================================================== 【一、环境准备】 1. 安装 PHP - Windows下载地址:https://windows.php.net/download/ - 建议版本:PHP 7.0 或以上(推荐 8.0+) - 下载后解压到任意目录(如 C:\php) - 将PHP目录添加到系统 PATH 环境变量 - 打开命令行验证: php --version 2. 启用 curl 扩展 - 打开 PHP 安装目录下的 php.ini 文件 - 找到 ;extension=curl 这一行 - 去掉前面的分号,改为:extension=curl - 保存文件后重新打开命令行验证: php -m | findstr curl 如果显示 "curl" 则启用成功 -------------------------------------------------------------- 【二、参数配置】 本Demo包含两个独立脚本: - query_points.php — 查询账户剩余点数 - recognize_csdn.php — 提交CSDN验证码识别 请根据需要打开对应的脚本文件,找到顶部的"配置区域",修改以下参数: 1. $APPKEY(必填) - 你的用户密钥,登录平台后在个人中心获取 - 示例:$APPKEY = "abc123def456"; 2. $CSDN_COOKIE(必填) - CSDN验证码的 waf_captcha_marker cookie字段值 - 需要从浏览器开发者工具(F12)中获取 - 打开浏览器 → F12 → Application/应用 → Cookies → 找到 waf_captcha_marker 字段 - 示例:$CSDN_COOKIE = "39f8d06301c63ecc990e..."; 3. $ITEM_ID(一般不需要改) - CSDN类型固定填写 600 4. $PROXY(可选) - 代理IP地址,支持的格式: * http://IP:端口 (普通HTTP代理,若需白名单支持请联系客服) * http://账号:密码@proxy.com:8080 (带认证的HTTP代理) * socks5://127.0.0.1:9888 (SOCKS5代理) 5. $DEVKEY(可选) - 开发者密钥 6. $UA(可选) - User-Agent值 -------------------------------------------------------------- 【三、运行方式】 1. 打开命令行(cmd 或 PowerShell) 2. 切换到脚本所在目录: cd CSDN\php 查询点数: 3. 执行:php query_points.php CSDN识别: 4. 执行:php recognize_csdn.php 5. 识别结果会在控制台中显示 -------------------------------------------------------------- 【四、常见问题】 Q1:运行时提示 "php 不是内部或外部命令" A1:PHP未安装或未添加到系统PATH,请参考【一、环境准备】 Q2:运行时提示 curl 相关错误 A2:请确认已在 php.ini 中启用 curl 扩展 Q3:查询点数成功但识别失败 A3:请检查 $CSDN_COOKIE 是否正确,cookie值需要实时获取 Q4:返回的结果无法通过验证 A4:尝试对返回的 data 值进行 urlencode() 编码后再使用 -------------------------------------------------------------- 【五、重要注意事项】 1. 查询点数接口有频率限制:不得超过1秒1次,否则会被拉黑24小时 2. 需要PHP启用curl扩展才能正常运行 3. 不要将你的 APPKEY 泄露给他人 4. 请确保你的账户有足够的点数余额 5. 目前CSDN识别支持文字点选,若需其他类型请联系客服 6. 如果提交结果失败无法通过,请将结果URL编码后提交 ==============================================================

查询点数

query_points.php

下载源码
query_points.php

PHP

<?php
/**
 * =============================================================
 *   查询账户点数 Demo (PHP版)
 *
 *   功能说明:
 *   查询账户剩余点数(余额)
 *
 *   使用方法:
 *   1. 确保PHP已安装并启用curl扩展
 *   2. 将下方的 APPKEY 替换为你自己的用户密钥
 *   3. 运行脚本:php query_points.php
 * =============================================================
 */

// ======================== 配置区域(请替换为你自己的参数)========================
// 用户密钥,登录平台后获取
$APPKEY = "你的appkey";
// ===============================================================================

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

// ======================== 主流程 ========================
echo str_repeat("*", 60) . "\n";
echo "  查询账户点数 Demo (PHP版)\n";
echo str_repeat("*", 60) . "\n";

// 检查参数是否已配置
if ($APPKEY === "你的appkey") {
    echo "\n[错误] 请先在脚本顶部的配置区域填写你的 APPKEY\n";
    exit(1);
}

echo str_repeat("=", 50) . "\n";
echo "[查询点数] 正在查询账户剩余点数...\n";
echo str_repeat("=", 50) . "\n";

$url = $API_BASE . "/points?appkey=" . urlencode($APPKEY);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
$response = curl_exec($ch);

if (curl_errno($ch)) {
    echo "[异常] 网络请求出错:" . curl_error($ch) . "\n";
    curl_close($ch);
    exit(1);
}
curl_close($ch);

$result = json_decode($response, true);
if ($result['status'] == 1) {
    echo "[成功] 查询成功!当前可用点数:" . $result['points'] . "\n";
} else {
    echo "[失败] 查询失败,错误信息:" . $result['msg'] . "\n";
    echo "[提示] 错误状态码:" . $result['status'] . ",请参考错误代码表排查\n";
}
echo "[完整响应] " . json_encode($result, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT) . "\n";

echo "\n" . str_repeat("=", 50) . "\n";
echo "[完成] 查询执行完毕\n";
echo str_repeat("=", 50) . "\n";
?>

提交识别

recognize_csdn.php

下载源码
recognize_csdn.php

PHP

<?php
/**
 * =============================================================
 *   CSDN识别 Demo (PHP版)
 *
 *   功能说明:
 *   提交CSDN验证码识别任务(目前支持文字点选)
 *
 *   使用方法:
 *   1. 确保PHP已安装并启用curl扩展
 *   2. 将下方的 APPKEY 替换为你自己的用户密钥
 *   3. 将 CSDN_COOKIE 替换为你获取到的 waf_captcha_marker cookie值
 *   4. 运行脚本:php recognize_csdn.php
 * =============================================================
 */

// ======================== 配置区域(请替换为你自己的参数)========================
// 用户密钥,登录平台后获取
$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";

// ======================== 主流程 ========================
echo str_repeat("*", 60) . "\n";
echo "  CSDN识别 Demo (PHP版)\n";
echo str_repeat("*", 60) . "\n";

// 检查参数是否已配置
if ($APPKEY === "你的appkey") {
    echo "\n[错误] 请先在脚本顶部的配置区域填写你的 APPKEY\n";
    exit(1);
}
if ($CSDN_COOKIE === "你获取到的cookie") {
    echo "\n[错误] 请先在脚本顶部的配置区域填写 CSDN_COOKIE\n";
    exit(1);
}

echo str_repeat("=", 50) . "\n";
echo "[CSDN识别] 正在提交CSDN识别任务...\n";
echo str_repeat("=", 50) . "\n";

$url = $API_BASE . "/recognize2";

// 构建POST请求数据
$postData = array(
    'appkey' => $APPKEY,
    'cookie' => $CSDN_COOKIE,
    'itemid' => $ITEM_ID,
);
// 如果设置了代理,则添加代理参数
if (!empty($PROXY)) {
    $postData['proxy'] = $PROXY;
}
// 如果设置了开发者密钥,则添加
if (!empty($DEVKEY)) {
    $postData['devkey'] = $DEVKEY;
}
// 如果设置了UA,则添加
if (!empty($UA)) {
    $postData['ua'] = $UA;
}

$cookieDisplay = strlen($CSDN_COOKIE) > 20 ? substr($CSDN_COOKIE, 0, 20) . "..." : $CSDN_COOKIE;
echo "[请求参数] cookie=" . $cookieDisplay . "\n";
echo "[请求参数] itemid=" . $ITEM_ID . "\n";

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postData));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 120); // 识别可能需要较长时间

$response = curl_exec($ch);

if (curl_errno($ch)) {
    echo "[异常] 网络请求出错:" . curl_error($ch) . "\n";
    curl_close($ch);
    exit(1);
}
curl_close($ch);

$result = json_decode($response, true);
if ($result['status'] == 1) {
    echo "[成功] 识别成功!耗时:" . $result['time'] . "ms\n";
    echo "[识别结果] " . $result['data'] . "\n";
} else {
    echo "[失败] 识别失败,错误信息:" . $result['msg'] . "\n";
    echo "[提示] 错误状态码:" . $result['status'] . ",请参考错误代码表排查\n";
}
echo "\n[完整响应] " . json_encode($result, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT) . "\n";

echo "\n" . str_repeat("=", 50) . "\n";
echo "[完成] 识别执行完毕\n";
echo str_repeat("=", 50) . "\n";
?>

Python

共 2 个示例,按接口动作拆分。

该语言注意事项

跟随当前语言展示
  • ============================================================== CSDN识别 对接示例 — Python版 使用说明 ============================================================== 【一、环境准备】 1. 安装 Python - 下载地址:https://www.python.org/downloads/ - 建议版本:Python 3.6 或以上(推荐 3.8+) - 安装时务必勾选 "Add Python to PATH"(添加到系统环境变量) - 安装完成后,打开命令行(cmd 或 PowerShell),输入以下命令验证: python --version 如果显示类似 "Python 3.x.x" 则安装成功 2. 安装依赖库 requests - 打开命令行,执行: pip install requests - 如果 pip 速度慢,可以使用国内镜像源: pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple - 安装完成后,可以用以下命令确认: pip show requests 看到版本号即表示安装成功 -------------------------------------------------------------- 【二、参数配置】 本Demo包含两个独立脚本: - query_points.py — 查询账户剩余点数 - recognize_csdn.py — 提交CSDN验证码识别 请根据需要打开对应的脚本文件,找到顶部的"配置区域",修改以下参数: 1. APPKEY(必填) - 你的用户密钥,登录平台后在个人中心获取 - 示例:APPKEY = "abc123def456" 2. CSDN_COOKIE(必填) - CSDN验证码的 waf_captcha_marker cookie字段值 - 需要从浏览器开发者工具(F12)中获取 - 打开浏览器 → F12 → Application/应用 → Cookies → 找到 waf_captcha_marker 字段 - 示例:CSDN_COOKIE = "39f8d06301c63ecc990e..." 3. ITEM_ID(一般不需要改) - CSDN类型固定填写 600 - 特殊类型请联系客服确认 4. PROXY(可选) - 如果你需要通过代理IP访问,填写代理地址 - 支持的格式: * http://IP:端口 (普通HTTP代理,若需白名单支持请联系客服) * http://账号:密码@proxy.com:8080 (带认证的HTTP代理) * socks5://127.0.0.1:9888 (SOCKS5代理) - 不需要代理则留空:PROXY = "" 5. DEVKEY(可选) - 开发者密钥,如果你有的话填写,没有则留空 6. UA(可选) - User-Agent值,如果需要的话填写,没有则留空 -------------------------------------------------------------- 【三、运行方式】 1. 打开命令行(cmd 或 PowerShell) 2. 切换到脚本所在目录: cd CSDN\python 查询点数: 3. 执行:python query_points.py - 仅查询账户剩余点数,确认APPKEY是否正确 CSDN识别: 4. 执行:python recognize_csdn.py - 提交CSDN验证码识别任务,等待服务器返回结果 5. 识别结果会在控制台中显示 -------------------------------------------------------------- 【四、常见问题】 Q1:运行时提示 "ModuleNotFoundError: No module named 'requests'" A1:说明 requests 库未安装,请执行 pip install requests Q2:运行时提示 "请先在脚本顶部的配置区域填写你的 APPKEY" A2:你还没有修改 APPKEY,请用你自己的密钥替换 "你的appkey" Q3:查询点数成功但识别失败 A3:请检查 CSDN_COOKIE 是否正确,cookie值需要实时获取 Q4:返回的结果无法通过验证 A4:尝试对返回的 data 值进行 URL编码(urlencode)后再使用 Q5:识别耗时较长(超过10秒) A5:这是正常现象,验证码识别需要服务器端处理,耐心等待即可 Q6:提示网络请求出错 A6:请检查网络连接是否正常,或者尝试使用代理IP -------------------------------------------------------------- 【五、重要注意事项】 1. 查询点数接口有频率限制:不得超过1秒1次,否则会被拉黑24小时 2. 识别接口的超时时间设置为60秒,请耐心等待结果 3. 不要将你的 APPKEY 泄露给他人 4. 请确保你的账户有足够的点数余额 5. 目前CSDN识别支持文字点选,若需其他类型请联系客服 6. 如果提交结果失败无法通过,请将结果URL编码后提交 ==============================================================

查询点数

query_points.py

下载源码
query_points.py

Python

# -*- coding: utf-8 -*-
"""
=============================================================
  查询账户点数 Demo (Python版)

  功能说明:
  查询账户剩余点数(余额)

  使用方法:
  1. 安装依赖:pip install requests
  2. 将下方的 APPKEY 替换为你自己的用户密钥
  3. 运行脚本:python query_points.py
=============================================================
"""

import requests
import json
import sys

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

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


def query_points():
    """
    查询账户剩余点数
    接口地址:GET http://api.ttocr.com/api/points
    注意:查询点数不得超过1秒1次,否则会被拉黑24小时
    """
    print("=" * 50)
    print("[查询点数] 正在查询账户剩余点数...")
    print("=" * 50)
    url = f"{API_BASE}/points"
    params = {"appkey": APPKEY}
    try:
        response = requests.get(url, params=params, timeout=10)
        result = response.json()
        if result.get("status") == 1:
            print(f"[成功] 查询成功!当前可用点数:{result.get('points')}")
        else:
            print(f"[失败] 查询失败,错误信息:{result.get('msg')}")
            print(f"[提示] 错误状态码:{result.get('status')},请参考错误代码表排查")
        print(f"[完整响应] {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("  查询账户点数 Demo (Python版)")
    print("*" * 60)
    if APPKEY == "你的appkey":
        print("\n[错误] 请先在脚本顶部的配置区域填写你的 APPKEY")
        sys.exit(1)
    query_points()
    print("\n" + "=" * 50)
    print("[完成] 查询执行完毕")
    print("=" * 50)

提交识别

recognize_csdn.py

下载源码
recognize_csdn.py

Python

# -*- 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)

Node.js

共 2 个示例,按接口动作拆分。

该语言注意事项

跟随当前语言展示
  • ============================================================== CSDN识别 对接示例 — Node.js版 使用说明 ============================================================== 【一、环境准备】 1. 安装 Node.js - 下载地址:https://nodejs.org/ - 建议版本:v12.0.0 或以上(推荐LTS长期支持版) - 安装时保持默认设置即可 - 安装完成后,打开命令行(cmd 或 PowerShell),输入以下命令验证: node --version 如果显示类似 "v18.x.x" 则安装成功 2. 无需安装第三方依赖 - 本Demo仅使用Node.js内置模块(http、querystring) - 无需执行 npm install -------------------------------------------------------------- 【二、参数配置】 本Demo包含两个独立脚本: - query_points.js — 查询账户剩余点数 - recognize_csdn.js — 提交CSDN验证码识别 请根据需要打开对应的脚本文件,找到顶部的"配置区域",修改以下参数: 1. APPKEY(必填) - 你的用户密钥,登录平台后在个人中心获取 - 示例:const APPKEY = "abc123def456"; 2. CSDN_COOKIE(必填) - CSDN验证码的 waf_captcha_marker cookie字段值 - 需要从浏览器开发者工具(F12)中获取 - 打开浏览器 → F12 → Application/应用 → Cookies → 找到 waf_captcha_marker 字段 - 示例:const CSDN_COOKIE = "39f8d06301c63ecc990e..."; 3. ITEM_ID(一般不需要改) - CSDN类型固定填写 600 4. PROXY(可选) - 代理IP地址,支持的格式: * http://IP:端口 (普通HTTP代理,若需白名单支持请联系客服) * http://账号:密码@proxy.com:8080 (带认证的HTTP代理) * socks5://127.0.0.1:9888 (SOCKS5代理) 5. DEVKEY(可选) - 开发者密钥 6. UA(可选) - User-Agent值 -------------------------------------------------------------- 【三、运行方式】 1. 打开命令行(cmd 或 PowerShell) 2. 切换到脚本所在目录: cd CSDN\nodejs 查询点数: 3. 执行:node query_points.js CSDN识别: 4. 执行:node recognize_csdn.js 5. 识别结果会在控制台中显示 -------------------------------------------------------------- 【四、常见问题】 Q1:运行时提示 "node 不是内部或外部命令" A1:Node.js未安装或未添加到系统PATH,请参考【一、环境准备】 Q2:查询点数成功但识别失败 A2:请检查 CSDN_COOKIE 是否正确,cookie值需要实时获取 Q3:返回的结果无法通过验证 A3:尝试对返回的 data 值进行 encodeURIComponent() 编码后再使用 Q4:提示连接超时 A4:识别任务需要服务器处理,超时时间已设置为120秒,请耐心等待 -------------------------------------------------------------- 【五、重要注意事项】 1. 查询点数接口有频率限制:不得超过1秒1次,否则会被拉黑24小时 2. 本Demo使用Node.js内置模块,无需npm安装任何依赖 3. 不要将你的 APPKEY 泄露给他人 4. 请确保你的账户有足够的点数余额 5. 目前CSDN识别支持文字点选,若需其他类型请联系客服 6. 如果提交结果失败无法通过,请将结果URL编码后提交 ==============================================================

查询点数

query_points.js

下载源码
query_points.js

Node.js

/**
 * =============================================================
 *   查询账户点数 Demo (Node.js版)
 *
 *   功能说明:
 *   查询账户剩余点数(余额)
 *
 *   使用方法:
 *   1. 确保已安装 Node.js (建议 v12+)
 *   2. 将下方的 APPKEY 替换为你自己的用户密钥
 *   3. 运行脚本:node query_points.js
 *   注意:本Demo使用Node.js内置模块,无需安装第三方依赖
 * =============================================================
 */

const http = require('http');

// ======================== 配置区域(请替换为你自己的参数)========================
// 用户密钥,登录平台后获取
const APPKEY = "你的appkey";
// ===============================================================================

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

/**
 * 发送HTTP GET请求
 */
function httpGet(url) {
    return new Promise((resolve, reject) => {
        http.get(url, { timeout: 10000 }, (res) => {
            let data = '';
            res.on('data', (chunk) => { data += chunk; });
            res.on('end', () => {
                try { resolve(JSON.parse(data)); }
                catch (e) { reject(new Error('JSON解析失败: ' + data)); }
            });
        }).on('error', reject);
    });
}

/**
 * 查询账户剩余点数
 * 接口地址:GET http://api.ttocr.com/api/points
 * 注意:查询点数不得超过1秒1次,否则会被拉黑24小时
 */
async function queryPoints() {
    console.log("=".repeat(50));
    console.log("[查询点数] 正在查询账户剩余点数...");
    console.log("=".repeat(50));
    try {
        const url = `${API_BASE}/points?appkey=${encodeURIComponent(APPKEY)}`;
        const result = await httpGet(url);
        if (result.status === 1) {
            console.log(`[成功] 查询成功!当前可用点数:${result.points}`);
        } else {
            console.log(`[失败] 查询失败,错误信息:${result.msg}`);
            console.log(`[提示] 错误状态码:${result.status},请参考错误代码表排查`);
        }
        console.log(`[完整响应] ${JSON.stringify(result, null, 2)}`);
        return result;
    } catch (e) {
        console.log(`[异常] 网络请求出错:${e.message}`);
        return null;
    }
}

// 主流程
async function main() {
    console.log("*".repeat(60));
    console.log("  查询账户点数 Demo (Node.js版)");
    console.log("*".repeat(60));

    if (APPKEY === "你的appkey") {
        console.log("\n[错误] 请先在脚本顶部的配置区域填写你的 APPKEY");
        process.exit(1);
    }

    await queryPoints();

    console.log("\n" + "=".repeat(50));
    console.log("[完成] 查询执行完毕");
    console.log("=".repeat(50));
}

main().catch(err => {
    console.error("[致命错误]", err.message);
    process.exit(1);
});

提交识别

recognize_csdn.js

下载源码
recognize_csdn.js

Node.js

/**
 * =============================================================
 *   CSDN识别 Demo (Node.js版)
 *
 *   功能说明:
 *   提交CSDN验证码识别任务(目前支持文字点选)
 *
 *   使用方法:
 *   1. 确保已安装 Node.js (建议 v12+)
 *   2. 将下方的 APPKEY 替换为你自己的用户密钥
 *   3. 将 CSDN_COOKIE 替换为你获取到的 waf_captcha_marker cookie值
 *   4. 运行脚本:node recognize_csdn.js
 *   注意:本Demo使用Node.js内置模块,无需安装第三方依赖
 * =============================================================
 */

const http = require('http');
const querystring = require('querystring');

// ======================== 配置区域(请替换为你自己的参数)========================
// 用户密钥,登录平台后获取
const APPKEY = "你的appkey";

// CSDN验证码的 waf_captcha_marker cookie字段值(从浏览器抓包获取)
const CSDN_COOKIE = "你获取到的cookie";

// 项目类型,CSDN固定填写 600(特殊类型请联系客服)
const ITEM_ID = 600;

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

// 可选参数:开发者密钥(如果有的话填写)
const DEVKEY = "";

// 可选参数:User-Agent(如果需要的话填写)
const UA = "";
// ===============================================================================

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

/**
 * 发送HTTP POST请求(表单数据)
 */
function httpPost(url, postData) {
    return new Promise((resolve, reject) => {
        const data = querystring.stringify(postData);
        const urlObj = new URL(url);
        const options = {
            hostname: urlObj.hostname,
            port: urlObj.port || 80,
            path: urlObj.pathname,
            method: 'POST',
            timeout: 120000, // 识别可能需要较长时间
            headers: {
                'Content-Type': 'application/x-www-form-urlencoded',
                'Content-Length': Buffer.byteLength(data)
            }
        };
        const req = http.request(options, (res) => {
            let body = '';
            res.on('data', (chunk) => { body += chunk; });
            res.on('end', () => {
                try { resolve(JSON.parse(body)); }
                catch (e) { reject(new Error('JSON解析失败: ' + body)); }
            });
        });
        req.on('error', reject);
        req.write(data);
        req.end();
    });
}

/**
 * 提交CSDN验证码识别任务
 * 接口地址:POST http://api.ttocr.com/api/recognize2
 * 必填参数:appkey, cookie, itemid(固定600)
 * 可选参数:proxy, devkey, ua
 * 重要提示:如果提交结果失败无法通过,请将结果URL编码后提交
 */
async function recognizeCsdn() {
    console.log("=".repeat(50));
    console.log("[CSDN识别] 正在提交CSDN识别任务...");
    console.log("=".repeat(50));
    const postData = {
        appkey: APPKEY,
        cookie: CSDN_COOKIE,
        itemid: ITEM_ID,
    };
    if (PROXY) { postData.proxy = PROXY; }
    if (DEVKEY) { postData.devkey = DEVKEY; }
    if (UA) { postData.ua = UA; }
    console.log(`[请求参数] cookie=${CSDN_COOKIE.length > 20 ? CSDN_COOKIE.substring(0, 20) + '...' : CSDN_COOKIE}`);
    console.log(`[请求参数] itemid=${ITEM_ID}`);
    try {
        const url = `${API_BASE}/recognize2`;
        const result = await httpPost(url, postData);
        if (result.status === 1) {
            console.log(`[成功] 识别成功!耗时:${result.time}ms`);
            console.log(`[识别结果] ${result.data}`);
        } else {
            console.log(`[失败] 识别失败,错误信息:${result.msg}`);
            console.log(`[提示] 错误状态码:${result.status},请参考错误代码表排查`);
        }
        console.log(`\n[完整响应] ${JSON.stringify(result, null, 2)}`);
        return result;
    } catch (e) {
        console.log(`[异常] 网络请求出错:${e.message}`);
        return null;
    }
}

// 主流程
async function main() {
    console.log("*".repeat(60));
    console.log("  CSDN识别 Demo (Node.js版)");
    console.log("*".repeat(60));

    if (APPKEY === "你的appkey") {
        console.log("\n[错误] 请先在脚本顶部的配置区域填写你的 APPKEY");
        process.exit(1);
    }
    if (CSDN_COOKIE === "你获取到的cookie") {
        console.log("\n[错误] 请先在脚本顶部的配置区域填写 CSDN_COOKIE");
        process.exit(1);
    }

    await recognizeCsdn();

    console.log("\n" + "=".repeat(50));
    console.log("[完成] 识别执行完毕");
    console.log("=".repeat(50));
}

main().catch(err => {
    console.error("[致命错误]", err.message);
    process.exit(1);
});

Java

共 2 个示例,按接口动作拆分。

该语言注意事项

跟随当前语言展示
  • ============================================================== CSDN识别 对接示例 — Java版 使用说明 ============================================================== 【一、环境准备】 1. 安装 JDK(Java Development Kit) - 下载地址:https://www.oracle.com/java/technologies/downloads/ - 或者使用OpenJDK:https://adoptium.net/ - 建议版本:JDK 8 或以上 - 安装完成后,打开命令行(cmd 或 PowerShell),输入以下命令验证: java -version javac -version 如果显示版本号则安装成功 2. 配置环境变量(如果上一步验证失败) - 设置 JAVA_HOME 为JDK安装目录 - 将 %JAVA_HOME%\bin 添加到系统 PATH 中 -------------------------------------------------------------- 【二、参数配置】 本Demo包含两个独立源文件: - QueryPoints.java — 查询账户剩余点数 - RecognizeCsdn.java — 提交CSDN验证码识别 请根据需要打开对应的源文件,找到顶部的"配置区域",修改以下参数: 1. APPKEY(必填) - 你的用户密钥,登录平台后在个人中心获取 - 示例:private static final String APPKEY = "abc123def456"; 2. CSDN_COOKIE(必填) - CSDN验证码的 waf_captcha_marker cookie字段值 - 需要从浏览器开发者工具(F12)中获取 - 打开浏览器 → F12 → Application/应用 → Cookies → 找到 waf_captcha_marker 字段 - 示例:private static final String CSDN_COOKIE = "39f8d06301c63ecc990e..."; 3. ITEM_ID(一般不需要改) - CSDN类型固定填写 600 4. PROXY(可选) - 代理IP地址,支持的格式: * http://IP:端口 (普通HTTP代理,若需白名单支持请联系客服) * http://账号:密码@proxy.com:8080 (带认证的HTTP代理) * socks5://127.0.0.1:9888 (SOCKS5代理) 5. DEVKEY(可选) - 开发者密钥 6. UA(可选) - User-Agent值 -------------------------------------------------------------- 【三、编译与运行】 1. 打开命令行(cmd 或 PowerShell) 2. 切换到源文件所在目录: cd CSDN\java 查询点数: 3. 编译:javac -encoding UTF-8 QueryPoints.java 4. 运行:java QueryPoints CSDN识别: 5. 编译:javac -encoding UTF-8 RecognizeCsdn.java 6. 运行:java RecognizeCsdn 注意:编译时必须加 -encoding UTF-8 参数,否则中文注释可能导致编译错误 -------------------------------------------------------------- 【四、常见问题】 Q1:编译时提示 "javac 不是内部或外部命令" A1:JDK未安装或环境变量未配置,请参考【一、环境准备】 Q2:编译时中文乱码或报错 A2:请确保使用 -encoding UTF-8 参数编译 Q3:查询点数成功但识别失败 A3:请检查 CSDN_COOKIE 是否正确,cookie值需要实时获取 Q4:返回的结果无法通过验证 A4:尝试对返回的 data 值进行 URLEncoder.encode() 编码后再使用 Q5:识别耗时较长 A5:这是正常现象,超时时间已设置为120秒 -------------------------------------------------------------- 【五、重要注意事项】 1. 查询点数接口有频率限制:不得超过1秒1次,否则会被拉黑24小时 2. 本Demo使用纯JDK内置类,无需引入第三方库 3. 不要将你的 APPKEY 泄露给他人 4. 请确保你的账户有足够的点数余额 5. 目前CSDN识别支持文字点选,若需其他类型请联系客服 6. 如果提交结果失败无法通过,请将结果URL编码后提交 ==============================================================

查询点数

QueryPoints.java

下载源码
QueryPoints.java

Java

import java.io.*;
import java.net.*;
import java.nio.charset.StandardCharsets;

/**
 * =============================================================
 *   查询账户点数 Demo (Java版)
 *
 *   功能说明:
 *   查询账户剩余点数(余额)
 *
 *   使用方法:
 *   1. 将下方的 APPKEY 替换为你自己的用户密钥
 *   2. 编译运行:javac -encoding UTF-8 QueryPoints.java && java QueryPoints
 * =============================================================
 */
public class QueryPoints {

    // ======================== 配置区域(请替换为你自己的参数)========================
    // 用户密钥,登录平台后获取
    private static final String APPKEY = "你的appkey";
    // ===============================================================================

    // API基础地址
    private static final String API_BASE = "http://api.ttocr.com/api";

    /**
     * 发送GET请求
     */
    private static String httpGet(String urlStr) throws Exception {
        URL url = new URL(urlStr);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("GET");
        conn.setConnectTimeout(10000);
        conn.setReadTimeout(10000);
        BufferedReader reader = new BufferedReader(
                new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8));
        StringBuilder sb = new StringBuilder();
        String line;
        while ((line = reader.readLine()) != null) {
            sb.append(line);
        }
        reader.close();
        conn.disconnect();
        return sb.toString();
    }

    /**
     * 查询账户剩余点数
     * 接口地址:GET http://api.ttocr.com/api/points
     * 注意:查询点数不得超过1秒1次,否则会被拉黑24小时
     */
    public static void main(String[] args) {
        System.out.println("************************************************************");
        System.out.println("  查询账户点数 Demo (Java版)");
        System.out.println("************************************************************");

        // 检查参数是否已配置
        if ("你的appkey".equals(APPKEY)) {
            System.out.println("\n[错误] 请先在代码顶部的配置区域填写你的 APPKEY");
            System.exit(1);
        }

        System.out.println("==================================================");
        System.out.println("[查询点数] 正在查询账户剩余点数...");
        System.out.println("==================================================");
        try {
            String url = API_BASE + "/points?appkey=" + URLEncoder.encode(APPKEY, "UTF-8");
            String result = httpGet(url);
            System.out.println("[完整响应] " + result);
        } catch (Exception e) {
            System.out.println("[异常] 网络请求出错:" + e.getMessage());
        }

        System.out.println("\n==================================================");
        System.out.println("[完成] 查询执行完毕");
        System.out.println("==================================================");
    }
}

提交识别

RecognizeCsdn.java

下载源码
RecognizeCsdn.java

Java

import java.io.*;
import java.net.*;
import java.nio.charset.StandardCharsets;

/**
 * =============================================================
 *   CSDN识别 Demo (Java版)
 *
 *   功能说明:
 *   提交CSDN验证码识别任务(目前支持文字点选)
 *
 *   使用方法:
 *   1. 将下方的 APPKEY 替换为你自己的用户密钥
 *   2. 将 CSDN_COOKIE 替换为你获取到的 waf_captcha_marker cookie值
 *   3. 编译运行:javac -encoding UTF-8 RecognizeCsdn.java && java RecognizeCsdn
 * =============================================================
 */
public class RecognizeCsdn {

    // ======================== 配置区域(请替换为你自己的参数)========================
    // 用户密钥,登录平台后获取
    private static final String APPKEY = "你的appkey";

    // CSDN验证码的 waf_captcha_marker cookie字段值(从浏览器抓包获取)
    private static final String CSDN_COOKIE = "你获取到的cookie";

    // 项目类型,CSDN固定填写 600(特殊类型请联系客服)
    private static final int ITEM_ID = 600;

    // 可选参数:代理IP(格式示例:http://IP:端口,若需白名单支持请联系客服。http://账号:密码@proxy.com:8080 或 socks5://127.0.0.1:9888)
    private static final String PROXY = "";

    // 可选参数:开发者密钥(如果有的话填写)
    private static final String DEVKEY = "";

    // 可选参数:User-Agent(如果需要的话填写)
    private static final String UA = "";
    // ===============================================================================

    // API基础地址
    private static final String API_BASE = "http://api.ttocr.com/api";

    /**
     * 发送POST请求(表单数据)
     */
    private static String httpPost(String urlStr, String postData) throws Exception {
        URL url = new URL(urlStr);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("POST");
        conn.setDoOutput(true);
        conn.setConnectTimeout(10000);
        conn.setReadTimeout(120000); // 识别可能需要较长时间
        conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
        OutputStream os = conn.getOutputStream();
        os.write(postData.getBytes(StandardCharsets.UTF_8));
        os.flush();
        os.close();
        BufferedReader reader = new BufferedReader(
                new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8));
        StringBuilder sb = new StringBuilder();
        String line;
        while ((line = reader.readLine()) != null) {
            sb.append(line);
        }
        reader.close();
        conn.disconnect();
        return sb.toString();
    }

    /**
     * 提交CSDN验证码识别任务
     * 接口地址:POST http://api.ttocr.com/api/recognize2
     * 必填参数:appkey, cookie, itemid(固定600)
     * 可选参数:proxy, devkey, ua
     * 重要提示:如果提交结果失败无法通过,请将结果URL编码后提交
     */
    public static void main(String[] args) {
        System.out.println("************************************************************");
        System.out.println("  CSDN识别 Demo (Java版)");
        System.out.println("************************************************************");

        // 检查参数是否已配置
        if ("你的appkey".equals(APPKEY)) {
            System.out.println("\n[错误] 请先在代码顶部的配置区域填写你的 APPKEY");
            System.exit(1);
        }
        if ("你获取到的cookie".equals(CSDN_COOKIE)) {
            System.out.println("\n[错误] 请先在代码顶部的配置区域填写 CSDN_COOKIE");
            System.exit(1);
        }

        System.out.println("==================================================");
        System.out.println("[CSDN识别] 正在提交CSDN识别任务...");
        System.out.println("==================================================");
        try {
            String url = API_BASE + "/recognize2";
            // 构建POST请求数据
            StringBuilder postData = new StringBuilder();
            postData.append("appkey=").append(URLEncoder.encode(APPKEY, "UTF-8"));
            postData.append("&cookie=").append(URLEncoder.encode(CSDN_COOKIE, "UTF-8"));
            postData.append("&itemid=").append(ITEM_ID);
            // 如果设置了代理,则添加代理参数
            if (PROXY != null && !PROXY.isEmpty()) {
                postData.append("&proxy=").append(URLEncoder.encode(PROXY, "UTF-8"));
            }
            // 如果设置了开发者密钥,则添加
            if (DEVKEY != null && !DEVKEY.isEmpty()) {
                postData.append("&devkey=").append(URLEncoder.encode(DEVKEY, "UTF-8"));
            }
            // 如果设置了UA,则添加
            if (UA != null && !UA.isEmpty()) {
                postData.append("&ua=").append(URLEncoder.encode(UA, "UTF-8"));
            }
            System.out.println("[请求参数] cookie=" + CSDN_COOKIE.substring(0, Math.min(20, CSDN_COOKIE.length())) + "...");
            System.out.println("[请求参数] itemid=" + ITEM_ID);
            String result = httpPost(url, postData.toString());
            System.out.println("[完整响应] " + result);
        } catch (Exception e) {
            System.out.println("[异常] 网络请求出错:" + e.getMessage());
        }

        System.out.println("\n==================================================");
        System.out.println("[完成] 识别执行完毕");
        System.out.println("==================================================");
    }
}

C#

共 2 个示例,按接口动作拆分。

该语言注意事项

跟随当前语言展示
  • ============================================================== CSDN识别 对接示例 — C#版 使用说明 ============================================================== 【一、环境准备】 方式一:使用 .NET SDK(推荐) 1. 下载地址:https://dotnet.microsoft.com/download 2. 建议版本:.NET 6.0 或以上 3. 安装完成后,打开命令行验证: dotnet --version 方式二:使用 csc.exe 编译器 1. 安装 Visual Studio(社区版免费) 2. 或者安装 .NET Framework SDK 3. csc.exe 通常位于: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe -------------------------------------------------------------- 【二、参数配置】 本Demo包含两个独立源文件: - QueryPoints.cs — 查询账户剩余点数 - RecognizeCsdn.cs — 提交CSDN验证码识别 请根据需要打开对应的源文件,找到顶部的"配置区域",修改以下参数: 1. APPKEY(必填) - 你的用户密钥,登录平台后在个人中心获取 - 示例:static string APPKEY = "abc123def456"; 2. CSDN_COOKIE(必填) - CSDN验证码的 waf_captcha_marker cookie字段值 - 需要从浏览器开发者工具(F12)中获取 - 打开浏览器 → F12 → Application/应用 → Cookies → 找到 waf_captcha_marker 字段 - 示例:static string CSDN_COOKIE = "39f8d06301c63ecc990e..."; 3. ITEM_ID(一般不需要改) - CSDN类型固定填写 600 4. PROXY(可选) - 代理IP地址,支持的格式: * http://IP:端口 (普通HTTP代理,若需白名单支持请联系客服) * http://账号:密码@proxy.com:8080 (带认证的HTTP代理) * socks5://127.0.0.1:9888 (SOCKS5代理) 5. DEVKEY(可选) - 开发者密钥 6. UA(可选) - User-Agent值 -------------------------------------------------------------- 【三、编译与运行】 方式一:使用 csc.exe 1. 打开"开发者命令提示符"(Developer Command Prompt) 2. 切换到源文件所在目录: cd CSDN\csharp 3. 编译查询点数:csc /out:QueryPoints.exe QueryPoints.cs 4. 运行:QueryPoints.exe 5. 编译CSDN识别:csc /out:RecognizeCsdn.exe RecognizeCsdn.cs 6. 运行:RecognizeCsdn.exe 方式二:使用 dotnet 1. 创建项目后将源文件放入,使用 dotnet run 运行 -------------------------------------------------------------- 【四、常见问题】 Q1:编译时提示 "csc 不是内部或外部命令" A1:请使用完整路径调用csc.exe,或者安装 .NET SDK 后使用 dotnet run Q2:编译时提示找不到 System.Web 命名空间 A2:使用csc编译时需要引用System.Web.dll: csc /r:System.Web.dll /out:RecognizeCsdn.exe RecognizeCsdn.cs Q3:查询点数成功但识别失败 A3:请检查 CSDN_COOKIE 是否正确,cookie值需要实时获取 Q4:返回的结果无法通过验证 A4:尝试对返回的 data 值进行 Uri.EscapeDataString() 编码后再使用 -------------------------------------------------------------- 【五、重要注意事项】 1. 查询点数接口有频率限制:不得超过1秒1次,否则会被拉黑24小时 2. 源文件必须使用 UTF-8 编码保存 3. 不要将你的 APPKEY 泄露给他人 4. 请确保你的账户有足够的点数余额 5. 目前CSDN识别支持文字点选,若需其他类型请联系客服 6. 如果提交结果失败无法通过,请将结果URL编码后提交 ==============================================================

查询点数

QueryPoints.cs

下载源码
QueryPoints.cs

C#

using System;
using System.IO;
using System.Net;
using System.Text;

/// <summary>
/// =============================================================
///   查询账户点数 Demo (C#版)
///
///   功能说明:
///   查询账户剩余点数(余额)
///
///   使用方法:
///   1. 将下方的 APPKEY 替换为你自己的用户密钥
///   2. 编译运行:csc QueryPoints.cs && QueryPoints.exe
///      或使用 dotnet run
/// =============================================================
/// </summary>
class QueryPoints
{
    // ======================== 配置区域(请替换为你自己的参数)========================
    // 用户密钥,登录平台后获取
    static string APPKEY = "你的appkey";
    // ===============================================================================

    // API基础地址
    static string API_BASE = "http://api.ttocr.com/api";

    /// <summary>
    /// 发送GET请求
    /// </summary>
    static string HttpGet(string url)
    {
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
        request.Method = "GET";
        request.Timeout = 10000;
        using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
        using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
        {
            return reader.ReadToEnd();
        }
    }

    static void Main(string[] args)
    {
        Console.OutputEncoding = Encoding.UTF8;
        Console.WriteLine(new string('*', 60));
        Console.WriteLine("  查询账户点数 Demo (C#版)");
        Console.WriteLine(new string('*', 60));

        // 检查参数是否已配置
        if (APPKEY == "你的appkey")
        {
            Console.WriteLine("\n[错误] 请先在代码顶部的配置区域填写你的 APPKEY");
            Environment.Exit(1);
        }

        Console.WriteLine(new string('=', 50));
        Console.WriteLine("[查询点数] 正在查询账户剩余点数...");
        Console.WriteLine(new string('=', 50));
        try
        {
            string url = API_BASE + "/points?appkey=" + Uri.EscapeDataString(APPKEY);
            string result = HttpGet(url);
            Console.WriteLine("[完整响应] " + result);
        }
        catch (Exception e)
        {
            Console.WriteLine("[异常] 网络请求出错:" + e.Message);
        }

        Console.WriteLine();
        Console.WriteLine(new string('=', 50));
        Console.WriteLine("[完成] 查询执行完毕");
        Console.WriteLine(new string('=', 50));
    }
}

提交识别

RecognizeCsdn.cs

下载源码
RecognizeCsdn.cs

C#

using System;
using System.IO;
using System.Net;
using System.Text;

/// <summary>
/// =============================================================
///   CSDN识别 Demo (C#版)
///
///   功能说明:
///   提交CSDN验证码识别任务(目前支持文字点选)
///
///   使用方法:
///   1. 将下方的 APPKEY 替换为你自己的用户密钥
///   2. 将 CSDN_COOKIE 替换为你获取到的 waf_captcha_marker cookie值
///   3. 编译运行:csc RecognizeCsdn.cs && RecognizeCsdn.exe
///      或使用 dotnet run
/// =============================================================
/// </summary>
class RecognizeCsdn
{
    // ======================== 配置区域(请替换为你自己的参数)========================
    // 用户密钥,登录平台后获取
    static string APPKEY = "你的appkey";

    // CSDN验证码的 waf_captcha_marker cookie字段值(从浏览器抓包获取)
    static string CSDN_COOKIE = "你获取到的cookie";

    // 项目类型,CSDN固定填写 600(特殊类型请联系客服)
    static int ITEM_ID = 600;

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

    // 可选参数:开发者密钥(如果有的话填写)
    static string DEVKEY = "";

    // 可选参数:User-Agent(如果需要的话填写)
    static string UA = "";
    // ===============================================================================

    // API基础地址
    static string API_BASE = "http://api.ttocr.com/api";

    /// <summary>
    /// 发送POST请求(表单数据)
    /// </summary>
    static string HttpPost(string url, string postData)
    {
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
        request.Method = "POST";
        request.ContentType = "application/x-www-form-urlencoded";
        request.Timeout = 120000; // 识别可能需要较长时间
        byte[] data = Encoding.UTF8.GetBytes(postData);
        request.ContentLength = data.Length;
        using (Stream stream = request.GetRequestStream())
        {
            stream.Write(data, 0, data.Length);
        }
        using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
        using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
        {
            return reader.ReadToEnd();
        }
    }

    static void Main(string[] args)
    {
        Console.OutputEncoding = Encoding.UTF8;
        Console.WriteLine(new string('*', 60));
        Console.WriteLine("  CSDN识别 Demo (C#版)");
        Console.WriteLine(new string('*', 60));

        // 检查参数是否已配置
        if (APPKEY == "你的appkey")
        {
            Console.WriteLine("\n[错误] 请先在代码顶部的配置区域填写你的 APPKEY");
            Environment.Exit(1);
        }
        if (CSDN_COOKIE == "你获取到的cookie")
        {
            Console.WriteLine("\n[错误] 请先在代码顶部的配置区域填写 CSDN_COOKIE");
            Environment.Exit(1);
        }

        Console.WriteLine(new string('=', 50));
        Console.WriteLine("[CSDN识别] 正在提交CSDN识别任务...");
        Console.WriteLine(new string('=', 50));
        try
        {
            string url = API_BASE + "/recognize2";
            // 构建POST请求数据
            StringBuilder postData = new StringBuilder();
            postData.Append("appkey=").Append(Uri.EscapeDataString(APPKEY));
            postData.Append("&cookie=").Append(Uri.EscapeDataString(CSDN_COOKIE));
            postData.Append("&itemid=").Append(ITEM_ID);
            // 如果设置了代理,则添加代理参数
            if (!string.IsNullOrEmpty(PROXY))
            {
                postData.Append("&proxy=").Append(Uri.EscapeDataString(PROXY));
            }
            // 如果设置了开发者密钥,则添加
            if (!string.IsNullOrEmpty(DEVKEY))
            {
                postData.Append("&devkey=").Append(Uri.EscapeDataString(DEVKEY));
            }
            // 如果设置了UA,则添加
            if (!string.IsNullOrEmpty(UA))
            {
                postData.Append("&ua=").Append(Uri.EscapeDataString(UA));
            }
            Console.WriteLine("[请求参数] cookie=" + CSDN_COOKIE.Substring(0, Math.Min(20, CSDN_COOKIE.Length)) + "...");
            Console.WriteLine("[请求参数] itemid=" + ITEM_ID);
            string result = HttpPost(url, postData.ToString());
            Console.WriteLine("[完整响应] " + result);
        }
        catch (Exception e)
        {
            Console.WriteLine("[异常] 网络请求出错:" + e.Message);
        }

        Console.WriteLine();
        Console.WriteLine(new string('=', 50));
        Console.WriteLine("[完成] 识别执行完毕");
        Console.WriteLine(new string('=', 50));
    }
}