public static int sendPost(String url, String parameters,String username,String password ,String id) {String result = "";BufferedReader in = null;// 读取响应输入流PrintWriter out = null;StringBuffer sb = new StringBuffer();// 处理请求参数String params = "";// 编码之后的参数String ip= "";String port= "";int resCode = 404;try {          CredentialsProvider credsProvider = new BasicCredentialsProvider();credsProvider.setCredentials(new AuthScope(ip, port), // 请求地址 + 端口号new UsernamePasswordCredentials(username, password));// 用户名 + 密码 (用于验证)HttpClient  httpclient = HttpClients.custom().setDefaultCredentialsProvider(credsProvider).build();try {SSLContext sslContext = SSLContextBuilder.create().useProtocol(SSLConnectionSocketFactory.SSL).loadTrustMaterial((x, y) -> true).build();RequestConfig config = RequestConfig.custom().setConnectTimeout(5000).setSocketTimeout(5000).build();httpclient = HttpClientBuilder.create().setDefaultRequestConfig(config).setSSLContext(sslContext).setSSLHostnameVerifier((x, y) -> true).build();} catch (Exception e) {e.printStackTrace();}HttpPost postMethod = new HttpPost(url);// 请求详细地址(如:http://192.168.1.105:9000/MotorVehicles)//根据不通要求自己添加头postMethod.addHeader("User-Identify", id);postMethod.addHeader("Content-Type", "application/json");StringEntity s = new StringEntity(parameters);// 向后台传的json数据s.setContentEncoding("utf-8");// 编码postMethod.setEntity(s);HttpResponse response = httpclient.execute(postMethod); // 执行POST方法resCode = response.getStatusLine().getStatusCode();System.out.println("resCode = " + resCode); // 获取响应码
//          System.out.println("result = " + EntityUtils.toString(response.getEntity(), "utf-8")); // 获取响应内容String resultfirst = EntityUtils.toString(response.getEntity(), "utf-8");logger.info("result = " + resultfirst); // 获取响应内容  if(resCode == 401) {String a = resultfirst;// 组织参数,发起第二次请求Header[] headers = response.getHeaders("WWW-Authenticate");HeaderElement[] elements = headers[0].getElements();String realm = null;String qop = null;String nonce = null;String opaque = null;String method = "POST";String uri = url;for (HeaderElement element : elements) {if (element.getName().equals("Digest realm")) {realm = element.getValue();} else if (element.getName().equals("qop")) {qop = element.getValue();} else if (element.getName().equals("nonce")) {nonce = element.getValue();} else if (element.getName().equals("opaque")) {opaque = element.getValue();}}String a1 = username + ":" + realm + ":" + password;String a2 = method + ":" + uri;String response1 = null;String nc = "00000001";String cnonce = "uniview";// 获取 Digest 这个字符串String backString = response.getFirstHeader("WWW-Authenticate").getValue();try {response1 = DigestUtils.md5DigestAsHex((DigestUtils.md5DigestAsHex(a1.getBytes("UTF-8")) + ":" + nonce + ":" + nc+ ":" + "uniview" + ":" + qop + ":" + DigestUtils.md5DigestAsHex(a2.getBytes("UTF-8"))).getBytes("UTF-8"));} catch (UnsupportedEncodingException e) {System.out.println("md5加密异常"+e);}postMethod.addHeader("Authorization", backString + ",username=\"" + username + "\"" + ",realm=\"" + realm + "\""+ ",nonce=\"" + nonce + "\"" + ",uri=\"" + uri + "\"" + ",qop=\"" + qop + "\"" + ",nc=\"" + nc + "\""+ ",cnonce=\"" + cnonce + "\"" + ",response=\"" + response1 + "\"" + ",opaque=\"" + opaque);// 发送第二次请求response = httpclient.execute(postMethod);resCode = response.getStatusLine().getStatusCode();//获取返回响应码System.out.println(resCode);if (HttpStatus.SC_OK == resCode) {logger.info("result = " + EntityUtils.toString(response.getEntity(), "utf-8")); // 获取响应内容  return resCode;} else {}} else {}} catch (Exception e) {System.out.println(e);}return resCode;}
``
对应 的xml<dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId><version>1.10</version></dependency><dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId><version>6.3.1</version><exclusions><exclusion><artifactId>elasticsearch-rest-client</artifactId><groupId>org.elasticsearch.client</groupId></exclusion><exclusion><groupId>org.elasticsearch</groupId><artifactId>elasticsearch</artifactId></exclusion></exclusions></dependency>
<dependency><groupId>commons-lang</groupId><artifactId>commons-lang</artifactId><version>2.6</version>
</dependency><dependency><artifactId>elasticsearch-rest-client</artifactId><groupId>org.elasticsearch.client</groupId><version>6.3.1</version></dependency><dependency><artifactId>elasticsearch</artifactId><groupId>org.elasticsearch</groupId><version>6.3.1</version></dependency>

java模拟Digest.认证相关推荐

  1. java httpClient Digest Auth 认证

    技术交流QQ群 933925017 java httpClient Digest Auth 认证 因为项目需要,请求海康摄像头,进行抓图以及云台控制等功能, 海康有http协议,但是需要进行请求头认证 ...

  2. java 模拟时钟_java模拟时钟

    本次课程设计采用时间片轮转调度算法来实现模拟进程调度任务的执行过 程. 用 Java 模拟进程调度过程,可以方便地将运行结果直观地表示出来.Java 语言 独有的多...... 本次课程设计采用时间片 ...

  3. CSDN实训 - Java模拟二次验证码(动态令牌)

    文章目录 前言 一.什么是动态令牌? 二.使用的Jar包 1. 生成二维码Jar包 2. Apache Commons Codec 3. 项目工具类 4. 下载链接 三.IDEA导入外部Jar包 四. ...

  4. HTTP的认证方式之DIGEST 认证(摘要认证)

    核心步骤: 步骤 1: 请求需认证的资源时,服务器会随着状态码 401Authorization Required,返回带WWW-Authenticate 首部字段的响应.该字段内包含质问响应方式认证 ...

  5. java 模拟登录新浪微博(通过cookie)

    java模拟登录新浪微博(通过cookie) 这几天一直在研究新浪微博的爬虫,发现爬取微博的数据首先要登录.本来打算是通过账号和密码模拟浏览器登录.但是现在微博的登录机制比较复杂.通过账号密码还没有登 ...

  6. Http Digest认证协议

    Http Digest认证协议 2011-12-13 16:22 2591人阅读 评论(1) 收藏 举报 authorizationalgorithm服务器credentialsdomaintoken ...

  7. 233网校java_java辅导:使用java模拟登陆考试大

    java辅导:使用java模拟登陆考试大 2009年1月5日来源:233网校网校课程 在线题库评论 分享到 public static void loginexamda() { URL url = n ...

  8. JAVA同时输入用户名和密码_用java模拟设计一个简单的“用户注册”程序。当用户输入用户名和密码时,单击“注...

    用java模拟设计一个简单的"用户注册"程序.当用户输入用户名和密码时,单击"注 2020 - 9 - 26 TAG : 所有功能均已实现,如有不满意的地方我再修改imp ...

  9. 用Java模拟multipart形式的Http Post请求

    本例通过java模拟了Http的request请求,请求格式为multipart,实现了向服务器同时传递json数据和图片数据. 1 import java.io.ByteArrayOutputStr ...

最新文章

  1. Android Material Design按钮样式
  2. 用GAN也可以P图,效果还不输PS | 英伟达出品
  3. python用什么开发平台_一般来说,python平台开发有什么作用?
  4. 颠倒整数的C语言程序,帮忙解决c语言题目1.编写一个程序,用户输入一个小于5位的正整数,把它的各位数字前后颠倒一下,并输出颠倒后的结果。2.编...
  5. 作业综合练习-初始化工作
  6. ubuntu服务器启动过程中重启卡死的问题解决办法
  7. Java黑皮书课后题第6章:6.11(金融应用:计算酬金)编写方法,利用编程练习题5.39中的方法计算酬金。方法头如下所示。编写程序,显示下面表格
  8. (转)elasticsearch6.0版本安装head插件
  9. 获2017中国最佳创业投资机构百强,西高投二次创业实现超越
  10. 计算机组成原理第二章测试题,计算机组成原理第二章习题答案.doc
  11. 一个月10起融资,宠物经济正在掏空年轻人的钱包
  12. C语言apr_socket,APR分析-高级IO篇
  13. 【设计模式】模板模式
  14. Riverbed助力皇家飞行医生服务所加速实施云优先战略
  15. Redis主从, 哨兵, Lettuce(二)
  16. 大数据工具和数据库区别和关联
  17. SAP固定资产中的几个日期
  18. java实验常见错误_求高手点拨一个Java SWING的IM系统实验的错误解决方案。
  19. 征途服务器维护镖车怎么办,征途网络游戏家族运镖问题
  20. 史上最全Maven教程(二)

热门文章

  1. html如何让条数按序号输出,JS 怎么控制页面序号较智能的生成?
  2. cms监控android,CMSV9道路监控终端
  3. 【小白学习PyTorch教程】十五、BERT:通过PyTorch来创建一个文本分类的Bert模型
  4. 七十六、React中的TodoList和拆分组件,组件之间的传值
  5. 北京内推 | 地平线视觉算法团队招聘视觉算法实习生
  6. ICML 2020 | 基于连续动态系统学习更加灵活的位置编码
  7. 巧断梯度:单个loss实现GAN模型(附开源代码)
  8. 【归并排序】-求逆序数算法
  9. python语法错误修改_python基础之错误、调试(异常处理)
  10. jmeter mysql 连接复用_JMeter 连接MySQL