using System; using System.IO; using System.Net; using System.Text; /// /// ============================================================= /// CSDN识别 Demo (C#版) /// /// 功能说明: /// 提交CSDN验证码识别任务(目前支持文字点选) /// /// 使用方法: /// 1. 将下方的 APPKEY 替换为你自己的用户密钥 /// 2. 将 CSDN_COOKIE 替换为你获取到的 waf_captcha_marker cookie值 /// 3. 编译运行:csc RecognizeCsdn.cs && RecognizeCsdn.exe /// 或使用 dotnet run /// ============================================================= /// 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"; /// /// 发送POST请求(表单数据) /// 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)); } }