栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java如何在HTTP请求时做DNS解析?

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java如何在HTTP请求时做DNS解析?

Java如何在HTTP请求中做DNS解析?
    • 前言
    • 源码分析
    • 测试

前言

网络传输数据协议无非就是TCP和UDP。在做HTTP请求时,传输层就是基于TCP协议,如下代码,其中的url参数就是统一资源定位器(Uniform Resource Locator)。

HttpPost httpPost = new HttpPost(url);

当HTTP请求Web服务器数据接口时,如果给的参数(url)带有服务器主机域名这种格式,必定通过DNS解析拿到Ip地址进而继续开启通道连接。那么如何进行解析的呢?下面通过源码分析的形式向大家展示。

源码分析

当请求连接时,才会使用Ip地址。因此我们将代码定位到CloseableHttpClient类的doExecute方法上来。

protected abstract CloseableHttpResponse doExecute(HttpHost target, HttpRequest request,
            HttpContext context) throws IOException, ClientProtocolException;

然后选择该接口的实现类AbstractHttpClient。

看一下该类的UML图。

深入到该类的doExecute方法中,可以的看到:

out = CloseableHttpResponseProxy.newProxy(
                            director.execute(target, request, execContext));

点击execute方法,发现它实现了RequestDirector接口,我们再找其实现类DefaultRequestDirector。在方法中找到该代码,我们也会总结,只有当连接的时候才会用到Ip地址。

tryConnect(roureq, context);

可以看到这行代码,关键来了,该方法就是要开启网络连接。

managedConn.open(route, context, params);

看该方法的实现类DefaultClientConnectionOperator,在该类的openConnection方法中有如下代码,顾名思义,这就是解析域名的入口。

final InetAddress[] addresses = resolveHostname(target.getHostName());

看解析的实现类,来到了InetAddress,这个类想必都很明白了,是java.net包里的常用类,来到解析方法getAllByName0中,找到getAddressesFromNameService方法。
这个就是从域名服务器获取Ip地址的方法。OK了,细节后面就自己看吧。

addresses = getAddressesFromNameService(host, reqAddr);

其实遇到网络相关的问题,应该首先能够想到java.net包,网络程序开发离不开这个包。


测试

查看百度域名的Ip地址如下代码所示。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/350939.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号