HttpClient发送请求时动态替换目标ip
问题描述:
使用HttpClient进行http请求,每次请求随机使用一个target host进行请求。
发http请求的时候,一般会配置数据源,设置ClientPNames.DEFAULT_HOST,这样在请求的时候目标机器host和端口就是配置的ClientPNames.DEFAULT_HOST。但是不能每次请求ClientPNames.DEFAULT_HOST,因为一个httpclient就对应一个ClientPNames.DEFAULT_HOST,就无法针对一次request进行目标host的修改。
例如:
HttpGet httpGet = new HttpGet(url);
在进行请求时,httpGet作为参数执行execute,此时url是相对路径,httpclient会将defaulthost+uri拼接为完整的请求地址进行请求。
看HttpClient的源代码可以发现URI是个线索,在execute方法中会判断URI中设置的是否是绝对路径还是相对路径,如果是相对路径时httpclient会将defaulthost+uri拼接为完整的请求地址。如果URI中设置了scheme并且URI配置了host就会用URI完整的绝对路径作为请求地址。判断逻辑如下
public final HttpResponse execute(HttpUriRequest request,HttpContext context)throws IOException, ClientProtocolException {if (request == null) {throw new IllegalArgumentException("Request must not be null.");}return execute(determineTarget(request), request, context);
}private static HttpHost determineTarget(HttpUriRequest request) throws ClientProtocolException {// A null target may be acceptable if there is a default target.// Otherwise, the null target is detected in the director.HttpHost target = null;URI requestURI = request.getURI();if (requestURI.isAbsolute()) {target = URIUtils.extractHost(requestURI);if (target == null) {throw new ClientProtocolException("URI does not specify a valid host name: " + requestURI);}}return target;
}
分析完就找到了方法解决问题了,在请求时设置URI即可,要注意的是build URI的时候要配置scheme参数才能生效。
HttpClient发送请求时动态替换目标ip相关推荐
- postman发送object_.NetCore HttpClient发送请求的时候为什么自动带上了一个RequestId头部...
奇怪的问题 最近在公司有个系统需要调用第三方的一个webservice.本来调用一个下很简单的事情,使用HttpClient构造一个SOAP请求发送出去拿到XML解析就是了. 可奇怪的是我们的请求在运 ...
- .NetCore HttpClient发送请求的时候为什么自动带上了一个RequestId头部?
奇怪的问题 最近在公司有个系统需要调用第三方的一个webservice.本来调用一个下很简单的事情,使用HttpClient构造一个SOAP请求发送出去拿到XML解析就是了.可奇怪的是我们的请求在运行 ...
- HttpClient发送请求
HttpClient发送请求 前言:前段时间接到一个需求,要求系统中实现一个可以上传语音文件的功能,然后将文件和需要的参数发送到电信的接口上: 开始说起来感觉很简单,但是就真的被折磨了好几天,主要还是 ...
- maven 打包时动态替换properties资源文件中的配置值
pom build节点下面添加resource配置: [html] view plaincopy <resources> <resource> <directory> ...
- VS2017登陆失败:我们无法刷新此账户的凭证、我们无法添加此账户发送请求时出错、评估期已结束,请登录以解除产品锁定
一.问题: 点击登录后会显示如下窗口: [忘了截图,图片截于:(35条消息) Visual Studio 2017无法登录问题解决_kellyjucy的博客-CSDN博客_vs2017无法登陆] 二. ...
- 使用 IE 或Chrome等浏览器,通过网络抓包的形式,查看发送请求时的网络
要求: 使用 IE 或Chrome等浏览器,通过网络抓包的形式,查看发送请求时的网络 实现步骤: 1.打开 IE 浏览器,选择"开发者工具",切换到"网络"标签 ...
- 通过httpclient发送请求的几种方式,发送文件、参数、json对象
使用工具:idea 框架:gradle.springboot 实现目标:使用 httpclient 发送文件/参数/json对象 method:post 主要用到的jar包: compile grou ...
- ios 发送请求时按home_iPhone 是否能够升级至指定的 iOS 系统版本?
对于 iPhone 用户来说,可能会有喜欢的特定 iOS 版本,例如经常有用户希望能回退到 iOS 12 或更早的系统.但比较遗憾的是,对于苹果官方已经关闭验证的系统版本,iPhone 5s 以及以上 ...
- 前后端分离时ajax发送请求时后端能接送,但是前端的response为空时
困扰了一天的问题,使用ajax向后端发送请求,后端成功接收并且处理,但是返回前端时在前端调用response时发现后端返回的数据为空 . success:function (response) {if ...
- Java利用HttpClient发送请求生成微信支付二维码、查询支付状态
一.HttpClient工具类 import org.apache.http.Consts; import org.apache.http.HttpEntity; import org.apache. ...
最新文章
- [03] 处理注解:反射
- centos 6.8 搭建svn服务器
- Web开发人员有用的代码比较工具
- linux在双系统中消失了,双系统重新安装windows后,ubuntu选项消失
- 【JS】call,apply,bind
- Codeforces Round #198 (Div. 2)A,B题解
- 常用文件格式转换大全: PDF转Word,WORD转PDF转换器,DOCX转DOC转换
- 用linux运行vasp,科学网—VASP使用 - 李继存的博文
- 王道 计算机网络试题讲解_王道考研系列--计算机网络
- win10通过ping命令来检测网速
- 【Python】Python中将字符串中的大写字母转换为小写字母,同时将小写字母转换为大写字母
- bzoj 4453 cys就是要拿英魂! —— 后缀数组+单调栈+set
- 【红外技术】红外焦平面阵列非均匀性校正
- nRF5340开发指南目录汇总
- Qt 编程 keySight 34401A 万用表(串口232编程)
- Dogfight :从无人机视频中检测无人机
- 前端开发——Ionic 3.0【爱创课堂专业前端培训】
- c语言 派生,继承和派生
- Python图像库PIL的类Image的paste写法
- 我国第一部纯国产超级计算机,纯国产超级计算机获得世界冠军
热门文章
- Lucas–Kanade(LK)光流算法详解
- 爬虫实现自动登陆抽屉网,实现对文章点赞,收藏,评论
- 实战案例:抽屉自动点赞与爬取汽车之家新闻
- 资金账户、证券账户及银行账户
- 简明 s3cmd 安装与使用手册
- 工业互联网体系架构、类型及应用
- ckfinder 配置 php,GitHub - itxq/ckfinder: CkFinder3.5.1 for PHP 优化版 (添加又拍云存储)...
- unity材质球复制
- 13年android手机top,2013年安卓ROOT工具大盘点(一键ROOT工具Top10)
- 服务器数据恢复成功案例(磁盘阵列恢复)