在项目中遇到一个需求,因为一直使用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直连域名问题那些事相关推荐

  1. okhttp https ip直连设置Host

    最近希望提高App访问API的速度,于是采用IP直连的方式,因为我用的库是okhttp,如果直接请求IP地址可能会报错: javax/net/ssl/SSLProtocolException: SSL ...

  2. ip访问 webstorem_常见问题-iOS WebView IP直连 如何处理 Cookie

    WKWebView 无法使用 NSURLProtocol 拦截请求 针对该问题方案如下: 换用 UIWebView 使用私有 API 进行注册拦截 换用 UIWebView 方案不做赘述,说明下使用私 ...

  3. Okhttp 接入HttpDNS(支持http/https,)达到IP直连

    HttpDns 是什么? HTTPDNS 利用 HTTP 协议与 DNS 服务器交互,代替了传统的基于 UDP 协议的 DNS 交互,绕开了运营商的 Local DNS,有效防止了域名劫持,提高域名解 ...

  4. 计算机网络 一、 IP地址,域名,DNS

    计算机网络 IP地址,域名,DNS 前言 IP地址 域名 DNS 公网,局域网 公网 局域网 前言 本篇记录一下计算机网络中,域名,IP地址,DNS之间的关系. IP地址 计算机之间相互通信需要知道对 ...

  5. HTTPS IP直连问题小结

    背景 任何一个移动APP项目都离不开网络接入功能,提升网络接入的质量几乎是所有移动项目的需求.很多项目都会引入HTTP DNS作为网络接入最基础也是最重要的优化之一.HTTP DNS的核心是后台下发某 ...

  6. DNS 优化之IP直连

    移动互联网中,DNS解析的失败率是联网失败占比很大的一种.有时候改用https传输后,多次遇到运营商DNS劫持导致客户端在进行握手认证的时候失败,进而无法正常使用. 为了优化这个问题,我们使用了IP ...

  7. Anydesk远程桌面及IP直连实现高速远程桌面

    Anydesk远程桌面及IP直连实现高速远程桌面 下载: Anydesk官网 于官网下载Anydesk,于本地以及你想要远程连接的电脑,我后面都称本地机器为客户端,远程电脑为服务端. 量子互联 htt ...

  8. 详谈为什么架构设计禁止 IP 直连

    首先两个问题 IP直连有什么问题? 怎么解决IP直连的问题? 什么是 IP 直连 看下面两个连接,一个连接字符串一个访问地址 jdbc:mysql://202.99.183.21:3306/db ht ...

  9. 小林和单字母.CN域名的那些事(中)

    如何做决策,信心从何来? 尴尬的问题来了,由于小林不久前才在北京购置房子支付了一笔首付,所以手头其实也很紧张,并不是一下子就能拿出20万来买下这4个单字母域名.可是为什么比前面那些更早接触到这批域名的 ...

  10. Wireshark小技巧:将IP显示为域名

    "  本文介绍如何使Wireshark报文窗口的Source栏及Destination内的IP直接显示为域名,提升报文分析效率." 一个典型的Wireshark界面如下: 从这个图 ...

最新文章

  1. SAP QM 如何在SAP系统里审批挂在Quality Notification里的document?
  2. pytorch torch.item()(返回此张量的值作为标准Python数字。 这仅适用于具有一个元素的张量。)
  3. 为什么复制粘贴时html,关于javascript:为什么你应该停止复制和粘贴
  4. 学院-读书:影响世界的100本书
  5. c++ 动态分配数组_C/C++编程笔记:「C语言指针」民间解读版本
  6. 如何实现在一个网页中弹出多个不同的小窗口
  7. 数值分析方程求根实验matlab,数值分析实验之非线性方程求根(MATLAB实现)
  8. Linux笔记-iptables开放指定端口,开放ICMP协议,其他端口禁止访问
  9. 蚂蚁集团上市造富:员工激励达1376.9亿元,人均超800万!
  10. python如何运行程序_01
  11. 有信宣布推出首款语音直播平台:红豆Live
  12. java 快速排序流程图_java简单快速排序实例解析
  13. 计算机 工程伦理论文题目,北京工业大学研究生院
  14. SQL Server 2005 彻底卸载、重装问题
  15. Java开发-使用Java语言实现刷微信跳一跳小游戏的分数
  16. Veeam 完整备份文件 (VBK) 和增量备份文件 (VIB)
  17. Simulink学习案例2
  18. python—scrapy框架爬虫—链家二手房数据
  19. Https环境将key秘钥和crt格式证书转成cer证书
  20. 数字电视业务PSI-SI学习系列

热门文章

  1. 使用Lucifer实现自动化渗透测试任务
  2. 生产者消费者模型(自己上锁与阻塞队列两版本)
  3. 澳洲计算机专业几年,2020年澳洲八大计算机硕士专业学费是多少?入学要求高吗?读几年?...
  4. effective java 枚举_Effective.Java第34-44条(枚举)
  5. oracle循环数据,oracle循环插入数据
  6. mysql统计一张表中条目个数的方法
  7. Java Integer 对象的比较
  8. decimal保留千分位
  9. Zookeeper开源客户端curator 分布式锁
  10. FunctionalInterface注解