Java实现HTTPS GET请求工具类
5星 · 超过95%的资源 需积分: 30 40 浏览量
更新于2024-08-04
收藏 3KB TXT 举报
"Java发送HTTPS GET请求工具类"
在Java编程中,发送HTTPS GET请求通常涉及到网络通信和安全套接层(SSL)技术。HTTPS协议是HTTP协议的安全版本,它通过SSL或TLS协议提供了数据加密、服务器身份验证和消息完整性检查,以确保数据在传输过程中的安全性。以下是一个简单的Java工具类,用于发送HTTPS GET请求:
首先,我们导入所需的类和包:
```java
import javax.net.ssl.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
```
在这个工具类中,定义了一个常量`ENCODING`来设置字符编码,通常是UTF-8,用于处理响应的编码问题:
```java
private static final String ENCODING = "UTF-8";
```
为了简化示例,我们创建了一个名为`HttpGet`的静态方法,接收一个URL字符串作为参数,返回GET请求的结果:
```java
public static String httpGet(String urlStr) {
// 实现代码
}
```
在`HttpGet`方法中,我们首先创建一个URL对象,然后通过`openConnection()`方法获取到`HttpURLConnection`对象,这个对象用于发送HTTP请求。由于我们处理的是HTTPS请求,所以类型会是`HttpsURLConnection`。接下来,设置连接超时和读取超时,以及设置请求方法为GET:
```java
URL url = new URL(urlStr);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setConnectTimeout(5000); // 连接超时时间,单位毫秒
connection.setReadTimeout(5000); // 读取超时时间,单位毫秒
connection.setRequestMethod("GET");
```
在处理HTTPS请求时,我们可能需要信任所有服务器,忽略证书验证。这是因为开发阶段或测试环境中,可能使用自签名的证书,或者服务器证书未被公共CA(证书颁发机构)认可。为此,我们创建了一个`HostnameVerifier`和`TrustManager`,使得SSL/TLS连接不进行证书链验证:
```java
private static void trustAllHosts() {
// Create a trust manager that does not validate certificate chains
TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager() {
@Override
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[]{};
}
@Override
public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
}
@Override
public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
}
}};
// Install the all-trusting trust manager
try {
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, new SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
return true;
}
});
} catch (Exception e) {
throw new RuntimeException(e);
}
}
```
在发送请求之前,调用`trustAllHosts()`方法来信任所有主机。然后设置连接的请求属性,如设置`Accept-Encoding`为`ENCODING`,并打开连接:
```java
connection.setRequestProperty("Accept-Encoding", ENCODING);
connection.connect();
```
最后,我们从`HttpURLConnection`的输入流中读取响应数据,将其转换为字符串并返回:
```java
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream(), ENCODING));
StringBuilder response = new StringBuilder();
String inputLine;
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
return response.toString();
```
在主方法`main`中,可以调用`httpGet`方法,传入目标HTTPS URL,打印出响应结果:
```java
public static void main(String[] args) {
// get方式调用接口
String resultString = httpGet("https://xxxxx?systemCode=1&apiCode=1&accessCode=xxxx");
// 获取接口信息
System.out.println(resultString);
}
```
请注意,信任所有服务器的设置仅适用于测试环境,生产环境中应避免使用,因为它可能导致安全风险,如中间人攻击。在生产环境中,应该正确配置证书和信任策略,以确保通信的安全性。
2017-12-27 上传
2019-02-14 上传
2023-04-13 上传
2018-01-18 上传
2019-04-09 上传
2023-12-14 上传
点击了解资源详情
Turing_wzh
- 粉丝: 859
- 资源: 13
最新资源
- phaser3-starfield-example:Phaser3 Starfield示例
- 鱼X糗百笑话网站源代码
- segmentation.rar_matlab例程_C/C++_
- OracleStock:项目将开发不同的模型来预测价格库存
- pixel-format-guide:像素格式指南
- 一个UIView子类,允许用户在其上进行绘制。-Swift开发
- 人工智能算法服务.zip
- conda-recipes:螳螂包装的conda食谱
- project-modul3
- yficdn
- cdp-开源
- my-css-loading-animation-static:博客文章的演示仓库
- 360时间同步防止时间修改器.zip
- Lingo8.0-IN-MATH-MODELING.rar_技术管理_Visual_C++_
- 人工智能墨镜(集成语音交互,闲聊机器人,咨询播报,身体状态显示于一体).zip
- Chrommander - tab navigator-crx插件