httpclient使用HTTP代理实践
时间:2022-07-23
本文章向大家介绍httpclient使用HTTP代理实践,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
最近在做测试的时候遇到一个问题:就是内部网络做了限制,「部分服务只有在机房的网段内才能访问」。
虽然不清楚具体原因,不过的确给测试造成了一些麻烦,使用工具或者Git进行文件同步的话,虽然可行,但总归不是那么方便。再加上一些功能测试工具选择的问题,对我来讲添加了更多的麻烦。不过这倒是更有利于我的性能测试方案实施,具体情况如下:如何在Linux命令行界面愉快进行性能测试。
所以想到了在Java
中使用proxy
配置,然后通过在机房开发机中配置一个HTTP
代理,然后本机请求从proxy
配置得到一个代理服务器地址,然后绕去内网访问服务,这样就完美解决了这个方案。
Demo代码
public static void main(String[] args) {
def get = getHttpPost("http://ip-api.com/json/?lang=zh-CN ")
def response1 = getHttpResponse(get)
output(response1)
setProxy(get,"104.129.198.211:10605")
def response = getHttpResponse(get)
output(response)
testOver()
}
控制台输出:
INFO-> 当前用户:fv,IP:10.60.192.21,工作目录:/Users/fv/Documents/workspace/fun/,系统编码格式:UTF-8,系统Mac OS X版本:10.15.6
INFO-> 请求uri:http://ip-api.com/json/?lang=zh-CN,耗时:982 ms
INFO->
~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~ JSON ~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~
> {
> ① . "zip":"",
> ① . "country":"中国",
> ① . "city":"北京",
> ① . "org":"Beijing Qishangzaixian Data Correspondence Technology Co., Ltd",
> ① . "timezone":"Asia/Shanghai",
> ① . "regionName":"北京市",
> ① . "isp":"IDC, China Telecommunications Corporation",
> ① . "query":"118.26.128.202",
> ① . "lon":116.3889,
> ① . "as":"AS23724 IDC, China Telecommunications Corporation",
> ① . "countryCode":"CN",
> ① . "region":"BJ",
> ① . "lat":39.9288,
> ① . "status":"success"
> }
~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~ JSON ~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~
INFO-> 请求uri:http://ip-api.com/json/?lang=zh-CN,耗时:488 ms
INFO->
~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~ JSON ~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~
> {
> ① . "zip":"90014",
> ① . "country":"美国",
> ① . "city":"洛杉矶",
> ① . "org":"Zscaler, Inc.",
> ① . "timezone":"America/Los_Angeles",
> ① . "regionName":"加利福尼亚州",
> ① . "isp":"ZSCALER, INC.",
> ① . "query":"104.129.198.211",
> ① . "lon":-118.2641,
> ① . "as":"AS22616 ZSCALER, INC.",
> ① . "countryCode":"US",
> ① . "region":"CA",
> ① . "lat":34.0494,
> ① . "status":"success"
> }
~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~ JSON ~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~
Process finished with exit code 0
封装方法
/**
* 设置代理请求
*
* @param request
* @param adress
*/
public static void setProxy(HttpRequestBase request, String adress) {
if (!Regex.isMatch(adress, "((25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))\.){3}(25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d))):([0-9]|[1-9]\d{1,3}|[1-5]\d{4}|6[0-4]\d{4}|65[0-4]\d{2}|655[0-2]\d|6553[0-5])"))
ParamException.fail("adress格式错误:" + adress);
String[] split = adress.split(":");
RequestConfig proxyRequestConfig = ClientManage.getProxyRequestConfig(split[0], changeStringToInt(split[1]));
request.setConfig(proxyRequestConfig);
}
public static void setProxy(HttpRequestBase request, String ip, int port) {
setProxy(request, ip + ":" + port);
}
/**
* 获取代理配置项
*
* @param ip
* @param port
* @return
*/
public static RequestConfig getProxyRequestConfig(String ip, int port) {
return RequestConfig.custom().setConnectionRequestTimeout(HttpClientConstant.CONNECT_REQUEST_TIMEOUT).setConnectTimeout(HttpClientConstant.CONNECT_TIMEOUT).setSocketTimeout(HttpClientConstant.SOCKET_TIMEOUT).setCookieSpec(CookieSpecs.IGNORE_COOKIES).setRedirectsEnabled(false).setProxy(new HttpHost(ip, port)).build();
}
- ASM 翻译系列第二十四弹:ASM Internal ASM files number 10 and 11
- Redhat设置NFS挂载的简单步骤
- WordPress后台首页显示RSS错误的解决办法
- ASM 翻译系列第十九弹:ASM Internal ASM Continuing Operations Directory
- ASM 翻译系列第二十五弹:ASM 高级知识 When will my rebalance complete
- ASM 翻译系列第二十六弹:ASM 高级知识 Where is my data
- LVS+Keepalived负载均衡主备&双主架构全攻略
- ASM 翻译系列第二十八弹:ASM INTERNAL Partnership and Status Table
- ASM 翻译系列第二十九弹:ASM INTERNAL Free Space Table
- MySql常用30种SQL查询语句优化方法
- RxJS速成
- 会HTML/CSS就可以轻松创建网站
- 区块链银行应用探索(Hyperledger fabric)
- mysql之基本语法
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 微博爬虫出错居然还和网络运营商有关
- 8.深入k8s:资源控制Qos和eviction及其源码分析
- 1. 不吹不擂,第一篇就能提升你对Bean Validation数据校验的认知
- CNN不用乘法? AdderNet和DeepShift论文理解
- 动手构建地铁关系网,实现最短路径查询
- Java并发编程(08):Executor线程池框架
- 用Scipy求解单个正态总体的置信区间
- 架构设计 | 基于电商交易流程,图解TCC事务分段提交
- 用Gaussian做CASSCF计算
- 用Gaussian 16计算振动分辨的紫外-可见吸收光谱
- graylog日志分析系统上手教程
- 使用Seq搭建免费的日志服务
- 拜托!这才是分布式系统CAP的正确打开方式!
- 接口管理这下总会了吧?
- 交子杯 - 2020 - AI赛道 - TOP1