Java 示例

请求并返回结果

示例代码

import java.io.FileInputStream;
import java.util.Base64;
import java.util.Base64.Encoder;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;

public class bingtopDama {

    public static void main(String[] args) {
        // 读取图片base64编码数据
        String captchaData = bingtopDama.getImageStr("图片路径.jpg");
        // post图片数据,账号信息,进行打码
        String returnStr = bingtopDama.sendPost(
            "http://www.bingtop.com/ocr/upload/",
            "username=用户名&password=密码&captchaType=验证码类型&captchaData="+captchaData,"UTF-8"
        );
        System.out.println(returnStr);
    }

    public static String getImageStr(String imgFile) {
        /**
         * @Description: 根据图片地址转换为base64编码字符串
         * @return String
         */
        FileInputStream inputStream = null;
        byte[] data = null;
        try {
            inputStream = new FileInputStream(imgFile);
            data = new byte[inputStream.available()];
            inputStream.read(data);
            inputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        Encoder encoder = Base64.getEncoder();
        String encodedata = encoder.encodeToString(data);
        String encode="";
        try {
            encode = URLEncoder.encode(encodedata,"UTF-8");
        } catch (Exception e) {
            System.out.println("转码异常!"+e);
            e.printStackTrace();
        }
        return encode;
    }


    public static String sendPost(String url, String param,String charset) {
        PrintWriter out = null;
        BufferedReader in = null;
        String result = "";
        String line;
        StringBuffer sb=new StringBuffer();
        try {
            URL realUrl = new URL(url);
            // 打开和URL之间的连接
            URLConnection conn = realUrl.openConnection();
            // 设置通用的请求属性 设置请求格式
            conn.setRequestProperty("contentType", charset);
            conn.setRequestProperty("content-type", "application/x-www-form-urlencoded");
            //设置超时时间
            conn.setConnectTimeout(60*1000);
            conn.setReadTimeout(60*1000);

            // 发送POST请求必须设置如下两行
            conn.setDoOutput(true);
            conn.setDoInput(true);
            // 获取URLConnection对象对应的输出流
            out = new PrintWriter(new OutputStreamWriter(conn.getOutputStream(),"UTF-8"));
            // 发送请求参数
            out.print(param);
            // flush输出流的缓冲
            out.flush();
            // 定义BufferedReader输入流来读取URL的响应    设置接收格式
            in = new BufferedReader(
                    new InputStreamReader(conn.getInputStream(),charset));
            while ((line = in.readLine()) != null) {
                sb.append(line);
            }
            result=sb.toString();
        } catch (Exception e) {
            System.out.println("发送 POST请求出现异常!"+e);
            e.printStackTrace();
        }
        //使用finally块来关闭输出流、输入流
        finally{
            try{
                if(out!=null){
                    out.close();
                }
                if(in!=null){
                    in.close();
                }
            }
            catch(IOException ex){
                ex.printStackTrace();
            }
        }
        return result;
    }
}

请求参数

{
    "username":"admin",
    "password":"123456",
    "captchaData":"/9j/4AAQ...示例省略若干位(图片文件内容的base64结果)...==",
    "captchaType":1001
}
  • username:注册用户名
  • password:登录密码
  • captchaData:图片文件内容,base64后的数据
  • captchaType:识别类型(整形),,请查阅识别分类

响应数据

{"code":0, "message":"", "data":{"captchaId":"1001-158201918112812","recognition":"RESULT"}}
  • code:统一错误返回
  • message:统一错误信息返回,正常为空
  • data->captchaId:识别ID(非数字格式,预留40字节字符串长度)
  • data->recognition:识别结果

提示

  • 简单图,英文字母、数字直接返回。全部大写化处理。
  • 中文图,可能返回中文 或者返回 JSON标准的unicode u4e2du6587 ,需要接入方使用标准JSON解析库自动处理。
  • 坐标图,返回 | 和 , 分割的相对图片左上角像素坐标, 100,102|200,202
  • 核心提示
    • 获取结果接口为长连接阻塞式,不需要轮询获取结果。此接口为长连接阻塞模式。正常情况下,此接口会阻塞HTTP请求,直至有识别结果返回。所以接入方发起HTTP请求时, 应当 将此接口的超时时间设置为 60秒 。
    • 为了防止网络问题导致长连接断开。接入方客户端应当在此接口没有返回任何 HTTP状态码 时(即网络故障),跳过本条,下次请求随机间隔 0.2 ~ 1.5 秒。
    • 如遇任何错误,例如用户密码错误、点数不足,重新上传时,必须间隔3秒以上,防止无意义的重试。否则服务器会认为恶意攻击封禁IP。