HttpClient ip直连域名问题那些事
在项目中遇到一个需求,因为一直使用dynamic域名访问数据,检测发现很慢,需要指定ip直接访问.
要基于HttpClient做,Socket方法不实际 ,对项目框架改动太大。所以这里不讨论Socket方式。
需要做的事情:
1、得到对应域名的ip地址;
- 通过InetAddress,提供两个方法InetAddress.getByName("www.baidu.com")得到单个ip和InetAddress.getAllByName("www.baidu.com")得到一组ip地址。这个方式有时候不准确,请根据实际需求使用。
- 通过ping命令获取,这个比较靠谱一点。
Process pro = Runtime.getRuntime().exec(PING_DOMAIN);//PING_DOMAIN 对应域名 BufferedReader buf = new BufferedReader(new InputStreamReader(pro.getInputStream()));
把ping出来的内容以流的方式解析,截取其中的IP地址
正在 Ping www.a.shifen.com [180.97.33.108] 具有 32 字节的数据: 来自 180.97.33.108 的回复: 字节=32 时间=2ms TTL=56 来自 180.97.33.108 的回复: 字节=32 时间=12ms TTL=56 来自 180.97.33.108 的回复: 字节=32 时间=3ms TTL=56 来自 180.97.33.108 的回复: 字节=32 时间=2ms TTL=56180.97.33.108 的 Ping 统计信息:数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失), 往返行程的估计时间(以毫秒为单位):最短 = 2ms,最长 = 12ms,平均 = 4ms
- 那就是服务器通过接口返回,这个就不需要前端做什么。
2、绑定IP
绑定IP也有很大方法,比如IP直连,绑定host,虚拟host等
- 绑host也是经常使用的方法,比如在测试时候 ,不同服务器的切换,都是通过绑定host访问的。我这里说的是某个域名host绑定方法,而不是全部服务器绑host访问。
BasicHttpParams httpParameters = new BasicHttpParams();HttpConnectionParams.setConnectionTimeout(httpParameters, 15000);HttpConnectionParams.setSoTimeout(httpParameters, 15000);HttpClient httpClient = new DefaultHttpClient(httpParameters);HttpResponse response;try {if (url.contains("www.baidu.com") && PINGIP!=null) {HttpHost httpHost = new HttpHost(PINGIP);ConnRouteParams.setDefaultProxy(httpParameters, httpHost);}HttpGet httpget = new HttpGet(url);response = httpClient.execute(httpget);} catch (UnknownHostException e) {} catch (ConnectTimeoutException e) {} catch (Exception e) {}
- 在HttpClient 4.2以上的jar包中提供了HttpMethod
HttpMethod method = new GetMethod(url); method.getParams().setVirtualHost("<span style="color:#808080;">180.97.33.108</span>");
通过setVirtualHost也能达到想要的效果。
- ip直连方式,这种方式很多公司都不支持,被服务器过滤了,不够百度支持可以用来测试。说直白点就是把www.baidu.com直接用ping出来ip地址代替。
- InetAddress方式,这种方式的缺陷是不能绑定任意ip只能绑定电脑本身的ip,通过InetAddress.getByAddress(PINGIP);
httpClient.getParams().setParameter(ConnRouteParams.LOCAL_ADDRESS,InetAddress.getByAddress(getStringToByte(PINGIP)));
getStringToByte(PINGIP)因为getByAddress需要使用Byte的,而byte范围1-127,超过127就需要转换下,比如((byte)180,97,33,108) 网上大量的充斥这种方式直连,这种方式经过验证是不靠谱的,只能绑定本地ip,不是任何ip,达不到需求的效果,所以不建议使用。
基本上就是这些吧,希望分享对其他人有所帮助,有什么更好的办法也可以留言交流
HttpClient ip直连域名问题那些事相关推荐
- okhttp https ip直连设置Host
最近希望提高App访问API的速度,于是采用IP直连的方式,因为我用的库是okhttp,如果直接请求IP地址可能会报错: javax/net/ssl/SSLProtocolException: SSL ...
- ip访问 webstorem_常见问题-iOS WebView IP直连 如何处理 Cookie
WKWebView 无法使用 NSURLProtocol 拦截请求 针对该问题方案如下: 换用 UIWebView 使用私有 API 进行注册拦截 换用 UIWebView 方案不做赘述,说明下使用私 ...
- Okhttp 接入HttpDNS(支持http/https,)达到IP直连
HttpDns 是什么? HTTPDNS 利用 HTTP 协议与 DNS 服务器交互,代替了传统的基于 UDP 协议的 DNS 交互,绕开了运营商的 Local DNS,有效防止了域名劫持,提高域名解 ...
- 计算机网络 一、 IP地址,域名,DNS
计算机网络 IP地址,域名,DNS 前言 IP地址 域名 DNS 公网,局域网 公网 局域网 前言 本篇记录一下计算机网络中,域名,IP地址,DNS之间的关系. IP地址 计算机之间相互通信需要知道对 ...
- HTTPS IP直连问题小结
背景 任何一个移动APP项目都离不开网络接入功能,提升网络接入的质量几乎是所有移动项目的需求.很多项目都会引入HTTP DNS作为网络接入最基础也是最重要的优化之一.HTTP DNS的核心是后台下发某 ...
- DNS 优化之IP直连
移动互联网中,DNS解析的失败率是联网失败占比很大的一种.有时候改用https传输后,多次遇到运营商DNS劫持导致客户端在进行握手认证的时候失败,进而无法正常使用. 为了优化这个问题,我们使用了IP ...
- Anydesk远程桌面及IP直连实现高速远程桌面
Anydesk远程桌面及IP直连实现高速远程桌面 下载: Anydesk官网 于官网下载Anydesk,于本地以及你想要远程连接的电脑,我后面都称本地机器为客户端,远程电脑为服务端. 量子互联 htt ...
- 详谈为什么架构设计禁止 IP 直连
首先两个问题 IP直连有什么问题? 怎么解决IP直连的问题? 什么是 IP 直连 看下面两个连接,一个连接字符串一个访问地址 jdbc:mysql://202.99.183.21:3306/db ht ...
- 小林和单字母.CN域名的那些事(中)
如何做决策,信心从何来? 尴尬的问题来了,由于小林不久前才在北京购置房子支付了一笔首付,所以手头其实也很紧张,并不是一下子就能拿出20万来买下这4个单字母域名.可是为什么比前面那些更早接触到这批域名的 ...
- Wireshark小技巧:将IP显示为域名
" 本文介绍如何使Wireshark报文窗口的Source栏及Destination内的IP直接显示为域名,提升报文分析效率." 一个典型的Wireshark界面如下: 从这个图 ...
最新文章
- SAP QM 如何在SAP系统里审批挂在Quality Notification里的document?
- pytorch torch.item()(返回此张量的值作为标准Python数字。 这仅适用于具有一个元素的张量。)
- 为什么复制粘贴时html,关于javascript:为什么你应该停止复制和粘贴
- 学院-读书:影响世界的100本书
- c++ 动态分配数组_C/C++编程笔记:「C语言指针」民间解读版本
- 如何实现在一个网页中弹出多个不同的小窗口
- 数值分析方程求根实验matlab,数值分析实验之非线性方程求根(MATLAB实现)
- Linux笔记-iptables开放指定端口,开放ICMP协议,其他端口禁止访问
- 蚂蚁集团上市造富:员工激励达1376.9亿元,人均超800万!
- python如何运行程序_01
- 有信宣布推出首款语音直播平台:红豆Live
- java 快速排序流程图_java简单快速排序实例解析
- 计算机 工程伦理论文题目,北京工业大学研究生院
- SQL Server 2005 彻底卸载、重装问题
- Java开发-使用Java语言实现刷微信跳一跳小游戏的分数
- Veeam 完整备份文件 (VBK) 和增量备份文件 (VIB)
- Simulink学习案例2
- python—scrapy框架爬虫—链家二手房数据
- Https环境将key秘钥和crt格式证书转成cer证书
- 数字电视业务PSI-SI学习系列
热门文章
- 使用Lucifer实现自动化渗透测试任务
- 生产者消费者模型(自己上锁与阻塞队列两版本)
- 澳洲计算机专业几年,2020年澳洲八大计算机硕士专业学费是多少?入学要求高吗?读几年?...
- effective java 枚举_Effective.Java第34-44条(枚举)
- oracle循环数据,oracle循环插入数据
- mysql统计一张表中条目个数的方法
- Java Integer 对象的比较
- decimal保留千分位
- Zookeeper开源客户端curator 分布式锁
- FunctionalInterface注解