Java带有验证码的模拟登陆

  • 需求:

        最近得到一个需求,需要模拟登陆网页,然后通过网页接口获取相应数据。一共两个网页,其中没有验证码的网页比较容易的模拟登陆成功。但是另一个带有验证码(图片)却总是登陆失败。

  • 代码:
获取识别后的验证码
public class AliYun {private static Logger logger = Logger.getLogger(AliYun.class);
    //    通过图片请求地址   获取图片Base64编码public static String getImageStrFromUrl(String imgURL) {byte[] data = null;InputStream inStream = null;try {// 创建URLURL url = new URL(imgURL);// 创建链接       (注意:稍后更改代码在这一部分)HttpURLConnection conn = (HttpURLConnection) url.openConnection();conn.setRequestMethod("GET");conn.setConnectTimeout(5 * 1000);inStream = conn.getInputStream();BufferedImage src = ImageIO.read(inStream);File file = new File("D:\\temp.jpg");ImageIO.write(src, "jpg", file);InputStream inputStream = new FileInputStream(file);data = new byte[inputStream.available()];inputStream.read(data);} catch (IOException e) {e.printStackTrace();} finally {try {inStream.close();} catch (IOException e) {e.printStackTrace();}}// 对字节数组Base64编码BASE64Encoder encoder = new BASE64Encoder();// 返回Base64编码过的字节数组字符串return encoder.encode(data);}    //    获取识别后的验证码public static String getLoginCode(String imgPath) {String baseImg = getImageStrFromUrl(imgPath);//base64转换baseImg = baseImg.replaceAll("\\r\\n", "");String host = "http://jisuyzmsb.market.alicloudapi.com";String path = "/captcha/recognize";String appcode = "你购买接口之后的Code";Map bodys = new HashMap();bodys.put("pic", baseImg);HttpRequest request = HttpRequest.post(host + path + "?type=en4", bodys, true).header("Authorization", "APPCODE " + appcode).header("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");String result = request.body();logger.debug("阿里云接口识别结果:" + result);JSONObject jsonObject = JSON.parseObject(result);if (jsonObject.containsKey


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部