IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> Java如何在HTTP请求时做DNS解析? -> 正文阅读

[网络协议]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地址如下代码所示。
在这里插入图片描述

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-10-29 13:25:46  更:2021-10-29 13:26:14 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年7日历 -2024/7/1 21:36:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码