在setProxy()方法中设置代理IP后可以将url中的域名换成这个代理IP。

http很简单,但是https这样会报错。

问题:如何使用代理发送https请求?

客户端发送https请求之前会先向这台服务器请求ssl证书,并在客服端对这个证书做一个校验。

而使用代理IP时,实际上请求打到了这个代理IP上,而客户端并不知道这件事,他仍然在等待url域名中所对应的ssl证书,而这代理ip对应的服务器实际上并没有这个证书,导致了https请求失败。

解决方法:

HttpClient中有一个    类,里面的方法中包含了需要验证的所有ssl证书类型,而我们只需要重写这个方法,并把需要验证的证书设置为空,即命令客户端不验证任何ssl证书,就ok了。

关于http请求头中的host字段:

https://blog.csdn.net/yzpbright/article/details/51052008

代码:

  1. private JSONObject HttpPing(String dns, String uri, String qlb, String scheme) {
  2. String url = scheme + "://" + dns + uri;
  3. CloseableHttpClient httpclient = null;
  4. if (scheme.equals("http")) {
  5. httpclient = getHttpClient(qlb);
  6. } else if (scheme.equals("https")) {
  7. httpclient = getHttpsClient(qlb);
  8. } else{
  9. return null;
  10. }
  11. HttpGet httpGet = new HttpGet(url);
  12. CloseableHttpResponse httpResp = null;
  13. try {
  14. httpResp = httpclient.execute(httpGet);
  15. } catch (IOException e) {
  16. e.printStackTrace();
  17. }
  18. try {
  19. int statusCode = httpResp.getStatusLine().getStatusCode();
  20. if (statusCode == org.apache.http.HttpStatus.SC_OK) {
  21. return JSONObject.parseObject(EntityUtils.toString(httpResp.getEntity(), "UTF-8"));
  22. }
  23. } catch (Exception e) {
  24. e.printStackTrace();
  25. } finally {
  26. try {
  27. httpResp.close();
  28. } catch (IOException e) {
  29. e.printStackTrace();
  30. }
  31. }
  32. return null;
  33. }
  34.   private CloseableHttpClient getHttpClient(String qlb) {
  35. HttpHost proxy = new HttpHost(qlb, 80, "http");
  36. //把代理设置到请求配置
  37. RequestConfig defaultRequestConfig = RequestConfig.custom()
  38. .setProxy(proxy)
  39. .build();
  40. CloseableHttpClient httpclient = HttpClients.custom().setDefaultRequestConfig(defaultRequestConfig).build();
  41. return httpclient;
  42. }
  43.  
  44. private CloseableHttpClient getHttpsClient(String qlb) {
        //这里设置客户端不检测服务器ssl证书
  45. try {
  46. X509TrustManager x509mgr = new X509TrustManager() {
  47. public void checkClientTrusted(X509Certificate[] xcs, String string) {
  48. }
  49. public void checkServerTrusted(X509Certificate[] xcs, String string) {
  50. }
  51. public X509Certificate[] getAcceptedIssuers() {
  52. return null;
  53. }
  54. };
  55. SSLContext sslContext = SSLContext.getInstance("TLS");
  56. sslContext.init(null, new TrustManager[] { x509mgr }, null);
  57. SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext, SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
  58. HttpHost proxy = new HttpHost(qlb, 443, "https");
  59. RequestConfig defaultRequestConfig = RequestConfig.custom()
  60. .setProxy(proxy)
  61. .build();
  62. CloseableHttpClient httpclient = HttpClients.custom().setSSLSocketFactory(sslsf).setDefaultRequestConfig(defaultRequestConfig).build();
  63. return httpclient;
  64. } catch (Exception e) {
  65. e.printStackTrace();
  66. }
  67. return null;
  68. }

java——HttpClient 代理模式发送Http Https的更多相关文章

  1. Java设计模式-代理模式之动态代理(附源代码分析)

    Java设计模式-代理模式之动态代理(附源代码分析) 动态代理概念及类图 上一篇中介绍了静态代理,动态代理跟静态代理一个最大的差别就是:动态代理是在执行时刻动态的创建出代理类及其对象. 上篇中的静态代 ...

  2. Java学习——代理模式

    Java中的三种代理模式 一,什么是代理模式? 代理模式是一种设计模式,简单的来说就是在不改变源码的情况下,实现对目标对象的功能扩展. 比如有个歌手对象叫Singer,这个对象有一个唱歌方法叫sing ...

  3. 【Java】代理模式、反射机制-动态代理

    关于代理模式和动态代理参考自:https://www.cnblogs.com/gonjan-blog/p/6685611.html 这里通过参考博客中的例子整理个人理解. 代理模式: 访问某个类的方法 ...

  4. 通俗易懂的讲解一下Java的代理模式

    一.基本概念 代理模式是对象的结构模式. 代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用(接口的引用) 二.静态代理 静态代理是指,代理类在程序运行前就已经定义好,其与**目标类 ...

  5. Java的代理模式

    最近在学习Spring,关于Spring AOP的代理模式不是很了解,看了一篇博文就懂了. https://www.cnblogs.com/cenyu/p/6289209.html Java的三种代理 ...

  6. JAVA动态代理模式(从现实生活角度理解代码原理)

    所谓动态代理,即通过代理类:Proxy的代理,接口和实现类之间可以不直接发生联系,而可以在运行期(Runtime)实现动态关联. java动态代理主要是使用java.lang.reflect包中的两个 ...

  7. JAVA 设计模式 代理模式

    用途 代理模式 (Proxy) 为其他对象提供一种代理以控制对这个对象的访问. 代理模式是一种结构型模式. 结构

  8. java之代理模式

    静态代理: java代理是一种模式--代理模式.采用代理模式,可以在不改变目标类代码的基础上,通过代理对象,来增加额外的功能(比如增加日志检测等)或者只需要目标对象的部分行为. java中,代理分为静 ...

  9. java 之 代理模式(大话设计模式)

    java代理模式顾名思义,就类似于大学,我想和冰可乐,可是我又在玩游戏,于是我让我的室友帮我把可乐带回来,简单的来说我的室友就是代理,而买可乐就是需要做的行为.这是笔者理解的代理模式 大话设计模式-类 ...

随机推荐

  1. Opencv中copyTo()函数的使用方法

    在Mat矩阵类的成员函数中copyTo(roi , mask)函数是非常有用的一个函数,尤其是后面的mask可以实现蒙版的功能,我们用几个实例来说明它的作用.我们要注意mask的数据类型,必须是CV_ ...

  2. 小型自动化运维工具pssh和传输工具rsync

    一.简单介绍 1.pssh全称是parallel-ssh,基于Python编写的并发在多台服务器上批量执行命令的工具.包括pssh,pscp,prsync,pnuke和pslurp.该项目包括pssh ...

  3. word2vec原理浅析

     1.word2vec简介 word2vec,即词向量,就是一个词用一个向量来表示.是2013年Google提出的.word2vec工具主要包含两个模型:跳字模型(skip-gram)和连续词袋模型( ...

  4. Java应用监控利器JMX

    啥是 JMX? The Java Management Extensions (JMX) API is a standard API for management and monitoring of ...

  5. java中enum----枚举的学习(更新中)

    package com.hdmaxfun; import java.util.Scanner; import com.icpc.Icpm; import java.util.HashMap; impo ...

  6. Pikachu漏洞练习平台实验——XSS(二)

    概述 简介 XSS是一种发生在Web前端的漏洞,所以其危害的对象也主要是前端用户 XSS漏洞可以用来进行钓鱼攻击.前端js挖矿.盗取用户cookie,甚至对主机进行远程控制 攻击流程 假设存在漏洞的是 ...

  7. redis漏洞攻击

    参考: https://www.cnblogs.com/kobexffx/p/11000337.html 利用redis漏洞获得root权限,挖矿. 解决方法: 用普通帐号启redis,用云的redi ...

  8. C++对象在继承情况下的内存布局

    1,C++ 中继承是非常重要的一个特性,本节课研究在继承的情形下,C++ 的对象模 型又有什么不同: 2,继承对象模型(最简单的情况下): 1,在 C++ 编译器的内部类可以理解为结构体: 2,子类是 ...

  9. document与Object的关系

    window与Objet 1. window.__proto__ === Window.prototype 2. window.__proto__.__proto__ === 窗口属性(WindowP ...

  10. go相关资料

    1.go的调度2.go struct能不能比较 因为是强类型语言,所以不同类型的结构不能作比较,但是同一类型的实例值是可以比较的,实例不可以比较,因为是指针类型 3.go defer(for defe ...