java http请求 apache_Java 使用 Apache 的 HttpClient 组件发送 https 请求

该博客介绍了如何在Java中使用Apache HttpClient组件发送HTTPS请求。通过创建自定义的SSLContext来绕过证书验证,设置请求头并发送JSON格式的数据。示例代码详细展示了整个过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;importjava.io.OutputStreamWriter;importjava.io.PrintWriter;importjava.net.URL;importjava.net.URLConnection;importjava.security.KeyManagementException;importjava.security.NoSuchAlgorithmException;importjava.security.cert.CertificateException;importjava.security.cert.X509Certificate;importjavax.net.ssl.HostnameVerifier;importjavax.net.ssl.HttpsURLConnection;importjavax.net.ssl.SSLContext;importjavax.net.ssl.SSLSession;importjavax.net.ssl.TrustManager;importjavax.net.ssl.X509TrustManager;importorg.apache.http.HttpEntity;importorg.apache.http.client.methods.CloseableHttpResponse;importorg.apache.http.client.methods.HttpPost;importorg.apache.http.config.Registry;importorg.apache.http.config.RegistryBuilder;importorg.apache.http.conn.socket.ConnectionSocketFactory;importorg.apache.http.conn.socket.PlainConnectionSocketFactory;importorg.apache.http.conn.ssl.SSLConnectionSocketFactory;importorg.apache.http.entity.StringEntity;importorg.apache.http.impl.client.CloseableHttpClient;importorg.apache.http.impl.client.HttpClients;importorg.apache.http.impl.conn.PoolingHttpClientConnectionManager;importorg.apache.http.util.EntityUtils;public classHttpRequest {public staticString exeHttpsRequest(String URL, String message, String token) {

String body= "";

CloseableHttpClient client= null;try{//采用绕过验证的方式处理https请求

SSLContext sslcontext =createIgnoreVerifySSL();//设置协议http和https对应的处理socket链接工厂的对象

Registry socketFactoryRegistry = RegistryBuilder.create()

.register("http", PlainConnectionSocketFactory.INSTANCE)

.register("https", newSSLConnectionSocketFactory(sslcontext,

SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER))

.build();

PoolingHttpClientConnectionManager connManager= newPoolingHttpClientConnectionManager(

socketFactoryRegistry);

HttpClients.custom().setConnectionManager(connManager);//创建自定义的httpclient对象

client =HttpClients.custom().setConnectionManager(connManager).build();//CloseableHttpClient client = HttpClients.createDefault();//创建post方式请求对象

HttpPost httpPost = newHttpPost(URL);//指定报文头Content-type、User-Agent

httpPost.setHeader("Content-type", "application/json");

httpPost.setHeader("Authorization", "Bearer " +token);

httpPost.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; rv:6.0.2) Gecko/20100101 Firefox/6.0.2");

StringEntity stringEntity= new StringEntity(message, "UTF-8");

stringEntity.setContentType("application/json");

httpPost.setEntity(stringEntity);//执行请求操作,并拿到结果(同步阻塞)

CloseableHttpResponse response =client.execute(httpPost);//获取结果实体

HttpEntity entity =response.getEntity();if (entity != null) {//按指定编码转换结果实体为String类型

body = EntityUtils.toString(entity, "UTF-8");

}

EntityUtils.consume(entity);//释放链接

response.close();//System.out.println("body:" + body);

} catch(Exception ex) {

ex.printStackTrace();

}finally{try{

client.close();

}catch(IOException e) {//TODO Auto-generated catch block

e.printStackTrace();

}

}returnbody;

}private static SSLContext createIgnoreVerifySSL() throwsNoSuchAlgorithmException, KeyManagementException {

SSLContext sc= SSLContext.getInstance("SSLv3");//实现一个X509TrustManager接口,用于绕过验证,不用修改里面的方法

X509TrustManager trustManager = newX509TrustManager() {

@Overridepublic voidcheckClientTrusted(java.security.cert.X509Certificate[] paramArrayOfX509Certificate,

String paramString)throwsCertificateException {

}

@Overridepublic voidcheckServerTrusted(java.security.cert.X509Certificate[] paramArrayOfX509Certificate,

String paramString)throwsCertificateException {

}

@Overridepublicjava.security.cert.X509Certificate[] getAcceptedIssuers() {return null;

}

};

sc.init(null, new TrustManager[] { trustManager }, null);returnsc;

}private static class TrustAnyTrustManager implementsX509TrustManager {public void checkClientTrusted(X509Certificate[] chain, String authType) throwsCertificateException {

}public void checkServerTrusted(X509Certificate[] chain, String authType) throwsCertificateException {

}publicX509Certificate[] getAcceptedIssuers() {return newX509Certificate[] {};

}

}private static class TrustAnyHostnameVerifier implementsHostnameVerifier {public booleanverify(String hostname, SSLSession session) {return true;

}

}public staticString sendSSLPostRequest(String url, String param) {

PrintWriter out= null;

BufferedReader in= null;

String result= "";try{//URLEncoder.encode(param,"UTF-8");

URL realUrl= newURL(url);

URLConnection conn=realUrl.openConnection();

conn.setRequestProperty("accept", "*/*");

conn.setRequestProperty("connection", "Keep-Alive");

conn.setRequestProperty("Encoding", "utf-8");

conn.setRequestProperty("Charsert", "utf-8");

conn.setRequestProperty("Content-Type", "application/json");

conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");

conn.setDoOutput(true);

conn.setDoInput(true);if (conn instanceofHttpsURLConnection) {

SSLContext sc= SSLContext.getInstance("SSL");

sc.init(null, new TrustManager[] { new TrustAnyTrustManager() }, newjava.security.SecureRandom());

((HttpsURLConnection) conn).setSSLSocketFactory(sc.getSocketFactory());

((HttpsURLConnection) conn).setHostnameVerifier(newTrustAnyHostnameVerifier());

}

out= new PrintWriter(new OutputStreamWriter(conn.getOutputStream(), "utf-8"));

out.print(param);

out.flush();

in= new BufferedReader(newInputStreamReader(conn.getInputStream()));

String line;while ((line = in.readLine()) != null) {

result+=line;

}

}catch(Exception e) {

System.out.println("POST 请求异常!!!" +e);

e.printStackTrace();

}finally{try{if (out != null) {

out.close();

}if (in != null) {

in.close();

}

}catch(IOException ex) {

ex.printStackTrace();

}

}returnresult;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值