.. bulit documentation master file, created by sphinx-quickstart on Mon Oct 8 10:30:28 2018. You can adapt this file completely to your liking, but it should at least contain the root `toctree` directive. Java 示例 ================================= .. toctree:: :maxdepth: 2 请求并返回结果 --------------- 请求接口地址 ++++++++++++ * http://www.bingtop.com/ocr/upload/(兼容https) 示例代码 ++++++++++ .. code-block:: 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( "https://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; } } 请求参数 +++++++++++++++++++++ .. code-block:: json { "username":"admin", "password":"123456", "captchaData":"/9j/4AAQ...示例省略若干位(图片文件内容的base64结果)...==", "captchaType":1000 } * username:注册用户名 * password:登录密码 * captchaData:图片文件内容,base64后的数据 * captchaType:识别类型(整形),,请查阅识别分类 响应数据 +++++++++++++++++++++ .. code-block:: json {"code":0, "message":"", "data":{"captchaId":"1001-158201918112812","recognition":"RESULT"}} * code:统一错误返回 * message:统一错误信息返回,正常为空 * data->captchaId:识别ID(非数字格式,预留40字节字符串长度) * data->recognition:识别结果 提示 +++++++++++++++++ * 简单图,英文字母、数字直接返回。全部大写化处理。 * 中文图,可能返回中文 或者返回 JSON标准的unicode \\u4e2d\\u6587 ,需要接入方使用标准JSON解析库自动处理。 * 坐标图,返回 | 和 , 分割的相对图片左上角像素坐标, 100,102|200,202 * 核心提示 * 获取结果接口为长连接阻塞式,不需要轮询获取结果。此接口为长连接阻塞模式。正常情况下,此接口会阻塞HTTP请求,直至有识别结果返回。所以接入方发起HTTP请求时, 应当 将此接口的超时时间设置为 60秒 。 * 为了防止网络问题导致长连接断开。接入方客户端应当在此接口没有返回任何 HTTP状态码 时(即网络故障),跳过本条,下次请求随机间隔 0.2 ~ 1.5 秒。 * 如遇任何错误,例如用户密码错误、点数不足,重新上传时,必须间隔3秒以上,防止无意义的重试。否则服务器会认为恶意攻击封禁IP。