Apache HttpClient HttpHost 类使用示例

import org.apache.http.HttpHost;

HttpHost host = HttpHost.create(url);
if (host.getPort() == -1) {
    host = new HttpHost(host.getHostName(), 9200, host.getSchemaName());
}
这段代码是Java语言编写的,使用了Apache HttpClient库来创建一个`HttpHost`对象。`HttpHost`是Apache HttpClient库中的一个类,用于表示HTTP主机的信息,包括主机名、端口号和协议名称(如http或https)。

代码解释如下:

1. `import org.apache.http.HttpHost;`:这行代码导入了Apache HttpClient库中的`HttpHost`类。

2. `HttpHost host = HttpHost.create(url);`:这行代码创建了一个`HttpHost`对象,`url`是一个字符串,包含了完整的URL信息。`HttpHost.create()`方法会解析这个URL,提取出主机名、端口号和协议名称,并创建一个`HttpHost`对象。

3. `if (host.getPort() == -1) {`:这行代码检查`HttpHost`对象的端口号是否为-1。在HTTP URL中,如果未指定端口号,那么默认的HTTP端口号是80,HTTPS的默认端口号是443。但是,`HttpHost.create()`方法在解析URL时,如果没有指定端口号,可能会返回-1。

4. `host = new HttpHost(host.getHostName(), 9200, host.getSchemaName());`:如果端口号是-1,那么这行代码将创建一个新的`HttpHost`对象,使用原来的主机名和协议名称,但是端口号设置为9200。这通常用于Elasticsearch客户端,因为Elasticsearch的默认端口号是9200。

举例说明:

假设我们有一个URL `"http://example.com"`,这个URL没有指定端口号,那么默认的端口号应该是80。
String url = "http://example.com";
HttpHost host = HttpHost.create(url); // host的值为HttpHost{hostname=example.com, port=80, scheme=http}
如果URL是 `"http://example.com:9200"`,那么指定了端口号9200。
String url = "http://example.com:9200";
HttpHost host = HttpHost.create(url); // host的值为HttpHost{hostname=example.com, port=9200, scheme=http}
在这两种情况下,`if (host.getPort() == -1)`这个条件都不会成立,因为端口号不是-1。

但是,如果我们有一个URL `"https://example.com"`,没有指定端口号,那么默认的HTTPS端口号是443。
String url = "https://example.com";
HttpHost host = HttpHost.create(url); // host的值为HttpHost{hostname=example.com, port=443, scheme=https}
在这种情况下,`if (host.getPort() == -1)`这个条件也不会成立。

然而,如果我们有一个URL `"http://example.com"`,并且我们想要强制使用端口9200,我们可以这样写:
String url = "http://example.com";
HttpHost host = HttpHost.create(url);
if (host.getPort() == -1) {
    host = new HttpHost(host.getHostName(), 9200, host.getSchemaName());
}
// 此时host的值为HttpHost{hostname=example.com, port=9200, scheme=http}
这样,即使原始URL没有指定端口号,我们也可以通过这段代码强制使用端口9200。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值