1.需求

部署在内网服务器的JavaWeb项目,后端需要访问互联网,通过有网络访问权限的另一台服务器的代理转发实现互联网访问。

2.实现

内网设备——设为A,通过外网设备——设为B,访问互联网,需要分别在A和B上进行代理配置。此时它们的相对关系是,A为客户端,B为服务端,A的所有互联网请求均发送给B,B代为转发给目标站点——设为X。X返回的数据亦由B代为转发给A。

后端Java程序一般都使用apache的httpClient进行网络资源请求。通过查资料得知,httpClient使用代理服务器进行网络请求的配置方法大致可以分为两种:

1.配置httpClient参数;

2.配置JVM系统代理(注意,不是操作系统)。

第二种可能主要用于开发环境,如IDEA或eclipse等。这里主要讨论第一种方式。

配置httpClient参数

1.极简模式

// proxyHost -- 代理ip; proxyPort -- 代理端口号;HTTP -- 通讯协议
HttpHost httpProxy = new HttpHost(proxyHost, proxyPort, "HTTP");
CloseableHttpClient httpClient = HttpClients.createDefault();
// url -- 资源路径
HttpPost request = new HttpPost(url);
request.setEntity(new StringEntity("上送的报文", "utf-8"));
CloseableHttpResponse response = httpClient.execute(httpProxy, request);

“这种方式要注意一点:new HttpHost()是支持指定协议类型的,但是httpClient不默认支持socks协议,所以如果我们把上面代码中的协议改成new HttpHost("proxyHost", proxyPort, "SOCKS"),会报错。”——引用自:Richard_易 2018.03.15

2.官方推荐

A. 使用RequestConfig配置类:

// proxyHost -- 代理ip; proxyPort -- 代理端口号;HTTP -- 通讯协议
HttpHost httpProxy = new HttpHost(proxyHost, proxyPort, "HTTP");
// url -- 资源地址
HttpPost request = new HttpPost(url);
request.setEntity(new StringEntity("上送的报文", "utf-8"));
CloseableHttpClient httpClient = HttpClients.createDefault();
// configUtils -- 自定义配置类对象
RequestConfig requestConfig = RequestConfig.custom().setConnectionRequestTimeout(configUtils.getConnectTimeout()).setConnectTimeout(configUtils.getConnectTimeout()).setSocketTimeout(configUtils.getSocketTimeout()).setProxy(configUtils.isUseProxy() ? httpProxy : null).build();
request.setConfig(requestConfig);
CloseableHttpResponse response = httpClient.execute(request);

B.使用RoutePlanner类:

设置默认参数的方法

// proxyHost -- 代理ip; proxyPort -- 代理端口号
HttpHost httpProxy = new HttpHost("proxyHost", "proxyPort");
DefaultProxyRoutePlanner routePlanner = new DefaultProxyRoutePlanner(httpProxy);
CloseableHttpClient httpclient = HttpClients.custom().setRoutePlanner(routePlanner).build();

注:此方法另有一种“使用系统代理”的实现,此处暂不赘述,参考下方链接1。

另,使用httpClient进行https请求时可能会有SSL证书识别的问题,可参考下方链接2解决。

3.参考资料

1.httpClient使用代理的主要设置方式

2.httpClient设置忽略SSL

Java后端通过代理服务器请求网络资源相关推荐

  1. java后端模拟http请求_Http请求后端

    前端 postman中 form-data.x-www-form-urlencoded.raw.binary的区别 1.form-data: 就是http请求中的multipart/form-data ...

  2. java后端获取前端请求参数

    纯servlet获取前端请求参数 测试页面 <body><h2>输入帐号密码</h2><form action="test" method ...

  3. java后端发送http请求

    一.新建一个工具类:HttpRequestUril package com.tfjybj.dtc.crawl.util;import java.io.*; import java.net.*; imp ...

  4. 解决“微信小程序http请求参数为空时,传到java后端变成了undefined”问题

    遇到问题: 最近在对接微信小程序和java后端springboot框架的接口,然后发现一个问题,当微信小程序发起http请求时,如果请求参数的值为空,传到java后端时就变成了undefined,这样 ...

  5. java后端请求第三方接口并处理HttpEntity类转换成实体类对象

      最近在写使用java后端去请求第三方接口的代码,给大家分享关于HttpEntity类的处理方式,而处理请求是需要根据第三方的要求来处理的,所以这里着重展示HttpEntity的处理.   在开始代 ...

  6. java后端获取客户端(用户)真实ip,原理

    java后端获取客户端真实ip,原理: 一般都是下面代码中的做法:但很多人只知道这样能拿到,稍微有改动就不知道怎么办了 看看网上的各种说法,接下来容我一一讲解,如有纰漏,敬请指正. public st ...

  7. Java后端 + 百度SDK实现人脸识别

    Java后端 + 百度SDK实现人脸识别 人工智能越来越贴近我们的生活,相信大家也经常接触到人脸识别,手机付款.app注册验证.门禁等等. 如果要用Java后台使用这些功能,那么需要怎么做呢?请看完下 ...

  8. java后端内部面试题

    21.什么时候不要使用索引? 1. 经常增删改的列不要建立索引: 2. 有大量重复的列不建立索引: 3. 表记录太少不要建立索引. 22.说说什么是 MVCC? 多版本并发控制(MVCC=Multi- ...

  9. 金九银十!阿里面试官告诉你面试Java后端开发面试会被问到什么问题?面试稳了!

    前言 面试java后端开发,基本上会问你一些理论基础,以及你对一些技术点的理解,或者说深一点问一问你所掌握的深浅如何? 如果之前有实习经验,还会问一些你做过的项目,以及你在其中担任的角色,就是说你负责 ...

最新文章

  1. Mybatis自定义排序
  2. 如何在Eclipse中开启代码自动提示功能
  3. arm服务器芯片尺寸,华为第四代ARM服务器自研芯片Hi1620规格曝光 全球首款7nm工艺的数据中心用ARM处理器...
  4. Yii的控制器等名称获取
  5. ASP.NET Core 5.0新增功能摘要
  6. EnjoyingSoft之Mule ESB开发教程第二篇:Mule ESB基本概念
  7. mysql把两个查询的结果合并为一个结果
  8. dell 2950 raid阵列冷迁移方法
  9. 2029.石子游戏 IX-LeetCode
  10. 生成对抗网络系列—CycleGAN
  11. 12306分流抢票软件 v1.13.21官方版 -抢票神器
  12. 五种主流的虚拟化技术
  13. Unity小组工程实践项目《最强外卖员》策划案纠错文档
  14. lisp 计算三点的夹角_平面三点计算夹角
  15. matlab矩阵两个乘法运算,MATLAB矩阵运算-乘法
  16. 笔试刷题BFS和DFS专题
  17. 富士通Fujitsu DPK8400E+ 打印机驱动
  18. php 动态倒计时计数器跳转至另一个页面,JavaScript_基于JavaScript实现网页倒计时自动跳转代码,用JS实现网页上的自动跳转功 - phpStudy...
  19. 解决多线程编程中大并发数等待唤醒的问题
  20. dubbo源码分析-dubbo-serialization

热门文章

  1. 重磅发布!RK3568开发板C应用编程手册
  2. VsCode tab 不能缩进
  3. 网络营销涉及的137个名词
  4. Smart Socket隐私权政策
  5. VISA卡,银联卡,MASTER CARD
  6. C#实现共享并且建立账号(指定账号登录操作,如果是 1219错误则清除用户数据)
  7. BLE错误码全面解析连接失败原因错误码解析BLE Disconnect Reason
  8. Frida不能和Magisk Hide一起使用
  9. 苏格拉底《临死前的演说》
  10. amlogic调试系列(一)-芯片型号列表