图文验证码识别(尖叫数据)

尖叫数据网址
自动登录的验证码识别

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值