使用httpclint做https请求的小工具
需要导入pom的
<!-- https://mvnrepository.com/artifact/org.apache.httpcomponents.client5/httpclient5 -->
<dependency>
<groupId>org.apache.httpcomponents.client5</groupId>
<artifactId>httpclient5</artifactId>
<version>5.2.1</version>
</dependency>
import io.renren.modules.app.entity.Customizeconfig;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.conn.ssl.NoopHostnameVerifier;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.ssl.SSLContexts;
import org.apache.http.util.EntityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.net.ssl.SSLContext;
import java.io.File;
import java.io.FileInputStream;
import java.security.KeyStore;
import java.security.cert.Certificate;
import java.security.cert.CertificateFactory;
/**
* @author xiaosi
* @date 2023/12/4
*/
@Component
public class HttpclintUtil {
@Autowired
private Customizeconfig customizeconfig;
public HttpResponse httpsclint(HttpRequestBase requestBase) throws Exception {
// 导入公钥文件
File file = new File(customizeconfig.keyPath);
FileInputStream instream = new FileInputStream(file);
Certificate cert = CertificateFactory.getInstance(customizeconfig.keyType).generateCertificate(instream);
try {
// 创建 KeyStore 并加载公钥
KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
trustStore.load(null, null);
trustStore.setCertificateEntry("alias",cert);
// 创建 SSL 上下文
SSLContext sslContext = SSLContexts.custom()
.loadTrustMaterial(trustStore, null)
.build();
// 创建 SSL 连接工厂
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext, new NoopHostnameVerifier());
// 创建 HttpClient
CloseableHttpClient httpclient = HttpClients.custom()
.setSSLSocketFactory(sslsf)
.build();
// 创建 HttpGet 请求对象
// HttpGet httpGet = new HttpGet("https://api.example.com/resource");
// 设置请求超时时间和连接超时时间
RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(5000).setSocketTimeout(5000).build();
requestBase.setConfig(requestConfig);
// 发送请求并获取响应
HttpResponse response = httpclient.execute(requestBase);
httpclient.close();
return response ;
} finally {
instream.close();
}
}
}