尖叫数据网址
自动登录的验证码识别
package com.yxb.common.base.util;
import com.yxb.base.util.StringUtil;
import com.yxb.common.base.constant.CommonConstant;
import com.yxb.common.base.exception.BasicException;
import net.sf.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import sun.misc.BASE64Encoder;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
/**
* 图文验证码识别
*/
public class VerificationCodeUtil {
private static Logger logger = LoggerFactory.getLogger(VerificationCodeUtil.class);
private static String jianjiao_url = "http://apigateway.jianjiaoshuju.com/api/v_1/yzm.html";
private static String jianjiao_appCode = "xxxxx";
private static String jianjiao_appKey = "xxxxxxx";
private static String jianjiao_appSecret = "xxxxxx";
private static String jianjiao_vType = "ne5";//ne4:4位英文数字,ne5:5位英文数字,ne6:6位英文数字
//识别图文验证码
public static String DistinguishCode(){
//访问二维码 转 base64
String url= CommonConstant.WORTH_ADMIN_DOMAIN + CommonConstant.WORTH_VERIFICATIONCODE_URL;//验证码访问url
String base64 = getCodeBase64(url);
//尖叫数据
Map<String,String> headerMap = new HashMap<String,String>();
headerMap.put("appCode", jianjiao_appCode);
headerMap.put("appKey", jianjiao_appKey);
headerMap.put("appSecret", jianjiao_appSecret);
StringBuilder sb = new StringBuilder();
base64 = "data:image/jpeg;base64," + base64;
sb.append("v_type=").append(jianjiao_vType);
sb.append("&v_pic=").append(base64);
logger.info("distinguish code para:{}", sb.toString());
JSONObject result = HttpUtils.doPostJSON(jianjiao_url, headerMap, sb.toString());
logger.info("distinguish code result:{}", result);
if(result == null || result.size() == 0 || StringUtil.isBlank(result.getString("errCode")) || !"0".equals(result.getString("errCode"))){
return "222222";
}
return result.getString("v_code");
//聚合数据
// base64 = URLEncoder.encode(base64);
// StringBuilder sb = new StringBuilder();
// sb.append("key=").append(juhe_key);
// sb.append("&codeType=").append(juhe_codeType);
// sb.append("&base64Str=").append(base64);
// sb.append("&dtype=").append("json");
// juhe_url = juhe_url+ "?"+sb.toString();
// JSONObject result = HttpUtils.doGetJSON(juhe_url);
// if(result == null || StringUtil.isBlank(result.getString("error_code")) || !"0".equals(result.getString("error_code"))){
// return "12345";
// }
// return result.getString("result");
// return "12345";
}
//链接url下载图片
private static String getCodeBase64(String urlString) {
try{
URL url=new URL(urlString);
HttpURLConnection conn= (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(15000);//超时提示1秒=1000毫秒
InputStream inStream=conn.getInputStream();//获取输出流
byte[] data= readInputStream(inStream);
// 对字节数组Base64编码
BASE64Encoder encoder = new BASE64Encoder();
return encoder.encode(data);// 返回Base64编码过的字节数组字符串
}catch(Exception e){
logger.error("下载图片失败 errorMsg:{}", e);
throw new BasicException(1);
}
}
//readInputStream方法--------------------------------------------------
private static byte[] readInputStream(InputStream inStream) throws Exception{
ByteArrayOutputStream outStream=new ByteArrayOutputStream();
byte[] buffer=new byte[1024];//转换为二进制
int len=0;
while((len =inStream.read(buffer))!=-1){
outStream.write(buffer,0,len);
}
return outStream.toByteArray();
}
}