失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Java带有验证码的模拟登陆

Java带有验证码的模拟登陆

时间:2020-10-29 06:24:25

相关推荐

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.";String path = "/captcha/recognize";String appcode = "你购买接口之后的Code";Map<String, String> bodys = new HashMap<String, String>();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

如果觉得《Java带有验证码的模拟登陆》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。