SpringBoot实战(二十九)发送HTTP/HTTPS请求(HttpURLConnection、HttpClient、Okhttp3、RestTemplate)

SpringBoot实战(二十九)发送HTTP/HTTPS请求(HttpURLConnection、HttpClient、Okhttp3、RestTemplate) 目录 实现方式一、java.net.HttpURLConnection 实

目录

实现方法1、java.net.HttpURLConnection的实现

1.1 简介

1.2 示例代码

1.3 执行结果

实现方法二、HttpClient库的实现

2.1 简介

2.2 Maven依赖

2.3 示例代码

2.4 执行结果

2.5 补充:配置文件(可选)

2.6 补充:配置类(可选)

2.7 补充:工具(可选)

2.8 补充:工具执行结果

实现方法三:Okhttp3库的实现

3.1 简介

3.2 Maven依赖

3.3 配置文件

3.4 配置类

3.5 工具

3.6 示例代码

3.7 执行结果

实现方法4.Spring RestTemplate实现

4.1 简介

4.2 Maven依赖

4.3 配置文件

4.4 配置类

4.5 HttpClient与RestTemplate的比较

4.5 示例代码

1)获取请求

1.1) 没有请求头的GET请求:

1.2) 带有请求头的GET请求:

1.3)文件下载的GET请求:

2)POST请求

2.1)常规POST请求:

2.2)文件上传的POST请求:

前言:

在日常工作或学习中,有很多地方需要发送HTTP/HTTPS请求。本文介绍了一些常见的实现方法,供大家参考,以免大家在收藏中迷失方向。

实现方式一、java.net.HttpURLConnection 实现

1.1 简介

java.net.HttpURLConnection 是一个Java 标准库类,用于发送HTTP 请求和接收HTTP 响应。它可以在不引入任何额外依赖项的情况下实现。

HttpURLConnection 预定义了几种方法,使开发人员能够更好地控制请求和响应。喜欢:

setRequestMethod():设置请求方法,例如GET或POST。

setRequestProperty():设置请求参数。

getResponseCode():获取请求状态码。

……

1.2 示例代码

HttpURLConnectionExample.java

导入java.net.*。

导入java.io.*。

公共类HttpURLConnectionExample {

私有静态HttpURLConnection con;

公共静态无效主(字符串[] args)抛出异常{

URL url=new URL(\’https://www.example.com\’);

con=(HttpURLConnection) url.openConnection();

con.setRequestMethod(\’GET\’);

BufferedReader in=new BufferedReader(new InputStreamReader(con.getInputStream()));

字符串输入行;

StringBuffer 内容=new StringBuffer();

while ((inputLine=in.readLine()) !=null) {

内容.append(inputLine);

}

附寄();

con.disconnect();

System.out.println(content.toString());

}

}

1.3 执行结果

实现方式二、HttpClient 库实现

2.1 简介

HttpClient 是一个HTTP 客户端库,提供向HTTP 服务器发送请求和处理响应的方法。

HttpClient支持GET、POST等多种请求协议,并允许开发者自由配置请求头、请求参数、连接池等。 HttpClient还提供基于线程池的异步请求处理。

2.2 Maven依赖

!– http 客户端–

依赖

groupIdorg.apache.httpcomponents/groupId

artifactIdhttpclient/artifactId

/依赖

! — httpclient 文件上传所需–

依赖

groupIdorg.apache.httpcomponents/groupId

artifactIdhttpmime/artifactId

/依赖

2.3 示例代码

HttpClientExample.java

导入org.apache.http.HttpEntity。

导入org.apache.http.client.methods.CloseableHttpResponse。

导入org.apache.http.client.methods.HttpGet。

导入org.apache.http.impl.client.CloseableHttpClient。

导入org.apache.http.impl.client.HttpClients。

导入org.apache.http.util.EntityUtils。

公共类HttpClientExample {

公共静态无效主(字符串[] args)抛出异常{

CloseableHttpClient httpclient=HttpClients.createDefault();

HttpGet httpget=new HttpGet(\’http://www.example.com\’);

CloseableHttpResponse 响应=httpclient.execute(httpget);

尝试{

HttpEntity实体=response.getEntity();

字符串结果=EntityUtils.toString(entity);

EntityUtils.consume(实体);

System.out.println(结果);

} 最后{

响应.close();

}

}

}

2.4 执行结果

可以看到日志中输出了详细的请求信息和响应信息。

2.5 补充:配置文件(选配)

httpclient.properties

#最大连接数

http_max_total=1000

# 并发执行数

http_default_max_perRoute=80

#创建连接的最长时间

http_validate_after_inactivity=5000

#从连接池获取连接的最长时间

http_connection_request_timeout=500

http_connection_timeout=10000

#数据传输的最大时间

http_socket_timeout=10000

等待时间=30000

偶像康泰=3

重试次数=3

2.6 补充:配置类(选配)

导入java.security.KeyStore。

导入javax.net.ssl.SSLContext;

导入org.apache.http.HeaderElement。

导入org.apache.http.HeaderElementIterator。

导入org.apache.http.HttpResponse。

导入org.apache.http.client.config.RequestConfig。

导入org.apache.http.conn.ConnectionKeepAliveStrategy。

导入org.apache.http.conn.ssl.SSLConnectionSocketFactory。

导入org.apache.http.conn.ssl.TrustAllStrategy。

导入org.apache.http.impl.client.CloseableHttpClient。

导入org.apache.http.impl.client.DefaultHttpRequestRetryHandler。

导入org.apache.http.impl.client.HttpClientBuilder。

导入org.apache.http.impl.conn.PoolingHttpClientConnectionManager。

导入org.apache.http.message.BasicHeaderElementIterator。

导入org.apache.http.protocol.HTTP。

导入org.apache.http.protocol.HttpContext。

导入org.apache.http.ssl.SSLContexts。

导入org.springframework.beans.factory.annotation.Value。

导入org.springframework.context.annotation.Bean。

导入org.springframework.context.annotation.Configuration。

导入org.springframework.context.annotation.PropertySource。

@Configuration//注解–配置类

@PropertySource(值=\’classpath:/httpClient.properties\’)

公共类HttpClientConfig {

@Value(\’${http_max_total}\’)

私有int maxTotal=800;

@Value(\’${http_default_max_perRoute}\’)

私有int defaultMaxPerRoute=80;

@Value(\’${http_validate_after_inactivity}\’)

私有int validateAfterInactivity=1000;

@Value(\’${http_connection_request_timeout}\’)

私有int 连接请求超时=5000;

@Value(\’${http_connection_timeout}\’)

私有int connectTimeout=10000;

@Value(\’${http_socket_timeout}\’)

私有int 套接字超时=20000;

@Value(\’${waitTime}\’)

私有int waitTime=30000;

@Value(\’${idleConTime}\’)

私有int 空闲ConTime=3;

@Value(\’${retryCount}\’)

私有int 重试次数=3;

@豆子

公共PoolingHttpClientConnectionManager createPoolingHttpClientConnectionManager() {

PoolingHttpClientConnectionManager poolmanager=new PoolingHttpClientConnectionManager();

PoolManager.setMaxTotal(maxTotal);

poolmanager.setDefaultMaxPerRoute(defaultMaxPerRoute);

poolmanager.setValidateAfterInactivity(validateAfterInactivity);

返回池管理器。

}

@豆子

公共CloseableHttpClient createHttpClient(PoolingHttpClientConnectionManager poolManager) {

HttpClientBuilder httpClientBuilder=HttpClientBuilder.create().setConnectionManager(poolManager);

httpClientBuilder.setKeepAliveStrategy(new ConnectionKeepAliveStrategy() {

@覆盖

公共长getKeepAliveDuration(HttpResponse响应,HttpContext上下文){

HeaderElementIterator 迭代器=new BasicHeaderElementIterator(response.headerIterator(HTTP.CONN_KEEP_ALIVE));

while (iterator.hasNext()) {

HeaderElement headerElement=iterator.nextElement();

字符串参数=headerElement.getName();

字符串值=headerElement.getValue();

if (null !=value param.equalsIgnoreCase(\’timeout\’)) {

返回Long.parseLong(值) * 1000。

}

}

返回30 * 1000。

}

});

httpClientBuilder.setRetryHandler(new DefaultHttpRequestRetryHandler(retryCount, false));

返回httpClientBuilder.build()。

}

@豆子

公共SSLContext createSSLContext() 抛出异常{

返回SSLContexts.custom().loadTrustmaterial(KeyStore.getInstance(KeyStore.getDefaultType()), new TrustAllStrategy()).build();

}

@豆子

公共SSLConnectionSocketFactory createSSLConnectionSocketFactory(SSLContext sslContext) {

新的SSLConnectionSocketFactory(sslContext,

新字符串[] {

\’TLSv1\’},

无效的,

SSLConnectionSocketFactory.getDefaultHostnameVerifier());

}

@豆子

公共RequestConfig createRequestConfig(){

返回RequestConfig.custom()

.setConnectionRequestTimeout(connectionRequestTimeout) //从连接池中获取连接超时时间

.setConnectTimeout(connectTimeout)//连接超时时间

.setSocketTimeout(socketTimeout)//请求超时

。建造();

}

}

2.7 补充:工具类(选配)

HttpClientUtil.java

导入lombok.extern.slf4j.Slf4j;

导入org.apache.http.Consts。

导入org.apache.http.HttpEntity。

导入org.apache.http.HttpStatus。

导入org.apache.http.NameValuePair。

导入org.apache.http.client.config.RequestConfig。

导入org.apache.http.client.entity.UrlEncodedFormEntity。

导入org.apache.http.client.methods.CloseableHttpResponse。

导入org.apache.http.client.methods.HttpGet。

导入org.apache.http.client.methods.HttpPost。

导入org.apache.http.entity.ContentType。

导入org.apache.http.entity.StringEntity。

导入org.apache.http.entity.mime.HttpMultipartMode。

导入org.apache.http.entity.mime.MultipartEntityBuilder。

导入org.apache.http.impl.client.CloseableHttpClient。

导入org.apache.http.message.BasicNameValuePair。

导入org.apache.http.util.EntityUtils。

导入org.springframework.beans.factory.annotation.Autowired。

导入org.springframework.stereotype.Component。

导入java.io.*。

导入java.net.URI。

导入java.net.URLDecoder。

导入java.net.URLEncoder。

导入java.util.ArrayList。

导入java.util.HashMap。

导入java.util.List。

导入java.util。

上面关于用#SpringBoot in action发送HTTP/HTTPS请求(HttpURLConnection、HttpClient、Okhttp3、RestTemplate)的相关内容(二十九)来源网络,仅供参考。相关信息请参见官方公告。

原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/92772.html

(0)
CSDN's avatarCSDN
上一篇 2024年7月4日 下午4:35
下一篇 2024年7月4日 下午4:35

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注