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

/**
 * =============================================================
 *   易盾识别 Demo (Java版)
 *
 *   功能说明：
 *   提交易盾验证码识别任务
 *
 *   使用方法：
 *   1. 将下方的 APPKEY 替换为你自己的用户密钥
 *   2. 将 YIDUN_ID 替换为你获取到的易盾验证码 id 参数
 *   3. 将 YIDUN_REFERER 替换为你获取到的 referer 值
 *   4. 编译运行：javac -encoding UTF-8 RecognizeYidun.java && java RecognizeYidun
 * =============================================================
 */
public class RecognizeYidun {

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

    // 易盾验证码的 id 参数值（从目标网站抓包获取）
    private static final String YIDUN_ID = "你获取到的易盾id";

    // 易盾验证码的 referer 值（从目标网站抓包获取，注意不是当前页面的URL）
    private static final String YIDUN_REFERER = "你获取到的referer地址";

    // 项目类型，易盾固定填写 500（特殊类型请联系客服）
    private static final int ITEM_ID = 500;

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

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

    // 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();
    }

    /**
     * 提交易盾验证码识别任务
     * 接口地址：POST http://api.ttocr.com/api/recognize2
     * 必填参数：appkey, id, referer, itemid(固定500)
     * 可选参数：proxy, devkey, ua, type
     * 重要提示：如果结果无法通过验证，请将返回的validate进行urlencode编码后再尝试
     */
    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);
        }
        if ("你获取到的易盾id".equals(YIDUN_ID)) {
            System.out.println("\n[错误] 请先在代码顶部的配置区域填写 YIDUN_ID 和 YIDUN_REFERER");
            System.exit(1);
        }

        System.out.println("==================================================");
        System.out.println("[易盾识别] 正在提交易盾识别任务...");
        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("&id=").append(URLEncoder.encode(YIDUN_ID, "UTF-8"));
            postData.append("&referer=").append(URLEncoder.encode(YIDUN_REFERER, "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"));
            }
            System.out.println("[请求参数] id=" + YIDUN_ID);
            System.out.println("[请求参数] referer=" + YIDUN_REFERER);
            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("==================================================");
    }
}

