这个HttpClientUtil工具类分享在GitHub上已经半年多的时间了,并且得到了不小的关注,有25颗star,被fork了38次。有了大家的鼓励,工具类一直也在完善中。最近比较忙,两个多月前的修改在今天刚修改测试完成,今天再次分享给大家。
验证码识别这项技术并不是本工具类的功能,而是通过一个开源的api来识别验证码的。这里做了一个简单的封装,主要是用来解决登陆时的验证码的问题。在线验证码识别官网:http://lab.ocrking.com/,github地址:https://github.com/AvensLab/OcrKing/,是一个功能非常强大的工具。
好了,言归正传,本次封装的工具重要代码如下:
/**
* 识别验证码
*
* @author arron
* @date 2016年3月24日 上午9:44:35
* @version 1.0
*/
public class OCR {
/**
* 接口说明:
* https://github.com/AvensLab/OcrKing/blob/master/线上识别http接口说明.txt
*/
private static final String apiUrl = "http://lab.ocrking.com/ok.html";
private static final String apiKey = PropertiesUtil.getProperty("OCR.key");
private static final String boundary = "----------------------------OcrKing_Client_Aven_s_Lab";
private static final String end="\r\n--" + boundary + "--\r\n";
private static final Header[] headers = HttpHeader.custom() .referer("http://lab.ocrking.com/?javaclient0.1)")
.build();
private static final Map<String, Object> map = getParaMap();
private static HttpClient client =null; //=HCB.custom().proxy("127.0.0.1", 8888).build();
public static void debug(){
client =HCB.custom().proxy("127.0.0.1", 8888).build();
}
public static void exitDebug(){
client =null;
}
//获取固定参数
private static Map<String, Object> getParaMap(){
//加载所有参数
Map<String , Object> map = new HashMap<String, Object>();
map.put("service", "OcrKingForCaptcha");
map.put("language", "eng");
map.put("charset", "7");//7-数字大写小写,5-数字大写字母
map.put("type", "http://www.unknown.com");
map.put("apiKey", apiKey);
return map;
}
/**
* 识别本地校验码(英文:字母+大小写)
*
* @param imgFilePath 验证码地址
* @return
*/
public static String ocrCode(String filePath){
return ocrCode(filePath, 0);
}
/**
* 识别本地校验码(英文:字母+大小写)
*
* @param imgFilePath 验证码地址
* @param limitCodeLen 验证码长度(如果结果与设定长度不一致,则返回获取失败的提示)
* @return
*/
@SuppressWarnings("resource")
pub