Java后端通过代理服务器请求网络资源
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后端通过代理服务器请求网络资源相关推荐
- java后端模拟http请求_Http请求后端
前端 postman中 form-data.x-www-form-urlencoded.raw.binary的区别 1.form-data: 就是http请求中的multipart/form-data ...
- java后端获取前端请求参数
纯servlet获取前端请求参数 测试页面 <body><h2>输入帐号密码</h2><form action="test" method ...
- java后端发送http请求
一.新建一个工具类:HttpRequestUril package com.tfjybj.dtc.crawl.util;import java.io.*; import java.net.*; imp ...
- 解决“微信小程序http请求参数为空时,传到java后端变成了undefined”问题
遇到问题: 最近在对接微信小程序和java后端springboot框架的接口,然后发现一个问题,当微信小程序发起http请求时,如果请求参数的值为空,传到java后端时就变成了undefined,这样 ...
- java后端请求第三方接口并处理HttpEntity类转换成实体类对象
最近在写使用java后端去请求第三方接口的代码,给大家分享关于HttpEntity类的处理方式,而处理请求是需要根据第三方的要求来处理的,所以这里着重展示HttpEntity的处理. 在开始代 ...
- java后端获取客户端(用户)真实ip,原理
java后端获取客户端真实ip,原理: 一般都是下面代码中的做法:但很多人只知道这样能拿到,稍微有改动就不知道怎么办了 看看网上的各种说法,接下来容我一一讲解,如有纰漏,敬请指正. public st ...
- Java后端 + 百度SDK实现人脸识别
Java后端 + 百度SDK实现人脸识别 人工智能越来越贴近我们的生活,相信大家也经常接触到人脸识别,手机付款.app注册验证.门禁等等. 如果要用Java后台使用这些功能,那么需要怎么做呢?请看完下 ...
- java后端内部面试题
21.什么时候不要使用索引? 1. 经常增删改的列不要建立索引: 2. 有大量重复的列不建立索引: 3. 表记录太少不要建立索引. 22.说说什么是 MVCC? 多版本并发控制(MVCC=Multi- ...
- 金九银十!阿里面试官告诉你面试Java后端开发面试会被问到什么问题?面试稳了!
前言 面试java后端开发,基本上会问你一些理论基础,以及你对一些技术点的理解,或者说深一点问一问你所掌握的深浅如何? 如果之前有实习经验,还会问一些你做过的项目,以及你在其中担任的角色,就是说你负责 ...
最新文章
- Mybatis自定义排序
- 如何在Eclipse中开启代码自动提示功能
- arm服务器芯片尺寸,华为第四代ARM服务器自研芯片Hi1620规格曝光 全球首款7nm工艺的数据中心用ARM处理器...
- Yii的控制器等名称获取
- ASP.NET Core 5.0新增功能摘要
- EnjoyingSoft之Mule ESB开发教程第二篇:Mule ESB基本概念
- mysql把两个查询的结果合并为一个结果
- dell 2950 raid阵列冷迁移方法
- 2029.石子游戏 IX-LeetCode
- 生成对抗网络系列—CycleGAN
- 12306分流抢票软件 v1.13.21官方版 -抢票神器
- 五种主流的虚拟化技术
- Unity小组工程实践项目《最强外卖员》策划案纠错文档
- lisp 计算三点的夹角_平面三点计算夹角
- matlab矩阵两个乘法运算,MATLAB矩阵运算-乘法
- 笔试刷题BFS和DFS专题
- 富士通Fujitsu DPK8400E+ 打印机驱动
- php 动态倒计时计数器跳转至另一个页面,JavaScript_基于JavaScript实现网页倒计时自动跳转代码,用JS实现网页上的自动跳转功 - phpStudy...
- 解决多线程编程中大并发数等待唤醒的问题
- dubbo源码分析-dubbo-serialization