import java.io.IOException; import java.io.UnsupportedEncodingException; import java.security.KeyManagementException; import java.security.NoSuchAlgorithmException; import java.security.cert.CertificateException; import java.security.cert.X509Certificate; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLException; import javax.net.ssl.SSLSession; import javax.net.ssl.SSLSocket; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.ParseException; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpPost; import org.apache.http.conn.scheme.Scheme; import org.apache.http.conn.ssl.SSLSocketFactory; import org.apache.http.conn.ssl.X509HostnameVerifier; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicNameValuePair; import org.apache.http.util.EntityUtils; public class HttpsClientUtils { public static final String sendHttpsRequestByPost(String url, Map<String, String> params) { String responseContent = null; HttpClient httpClient = new DefaultHttpClient(); //创建TrustManager X509TrustManager xtm = new X509TrustManager() { public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {} public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {} public X509Certificate[] getAcceptedIssuers() { return null; } }; //这个好像是HOST验证 X509HostnameVerifier hostnameVerifier = new X509HostnameVerifier() { public boolean verify(String arg0, SSLSession arg1) { return true; } public void verify(String arg0, SSLSocket arg1) throws IOException {} public void verify(String arg0, String[] arg1, String[] arg2) throws SSLException {} public void verify(String arg0, X509Certificate arg1) throws SSLException {} }; try { //TLS1.0与SSL3.0基本上没有太大的差别,可粗略理解为TLS是SSL的继承者,但它们使用的是相同的SSLContext SSLContext ctx = SSLContext.getInstance("TLS"); //使用TrustManager来初始化该上下文,TrustManager只是被SSL的Socket所使用 ctx.init(null, new TrustManager[] { xtm }, null); //创建SSLSocketFactory SSLSocketFactory socketFactory = new SSLSocketFactory(ctx); socketFactory.setHostnameVerifier(hostnameVerifier); //通过SchemeRegistry将SSLSocketFactory注册到我们的HttpClient上 httpClient.getConnectionManager().getSchemeRegistry().register(new Scheme("https", socketFactory, 443)); HttpPost httpPost = new HttpPost(url); List<NameValuePair> formParams = new ArrayList<NameValuePair>(); // 构建POST请求的表单参数 for (Map.Entry<String, String> entry : params.entrySet()) { formParams.add(new BasicNameValuePair(entry.getKey(), entry.getValue())); } httpPost.setEntity(new UrlEncodedFormEntity(formParams, "UTF-8")); HttpResponse response = httpClient.execute(httpPost); HttpEntity entity = response.getEntity(); // 获取响应实体 if (entity != null) { responseContent = EntityUtils.toString(entity, "UTF-8"); } } catch (KeyManagementException e) { e.printStackTrace(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (ParseException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { // 关闭连接,释放资源 httpClient.getConnectionManager().shutdown(); } return responseContent; } }
有时间再仔细看,感谢原作者。
相关推荐
本篇文章将深入探讨如何在Java中实现一个用于处理HTTPS请求的工具类。 首先,要实现HTTPS请求,我们需要导入Java的`java.net`和`javax.net.ssl`包,这两个包提供了处理网络连接和SSL/TLS安全协议的类。以下是一些...
`Image_loader`是一个用于处理图片加载的工具,尤其适用于处理HTTPS请求。在这个场景下,我们主要探讨的是如何使用`Image_loader`来处理HTTPS协议的图片请求。 HTTPS(Hypertext Transfer Protocol Secure)是一种...
至于提到的"相关jar包全有",这可能指的是用于处理HTTPS请求和SSL连接的Java标准库(如`javax.net.ssl.*`)以及其他可能需要的第三方库,如Apache HttpClient。"TestHttp"可能是一个测试HTTP请求的Java类或文件,你...
本篇文章将详细介绍如何使用Java语言实现Http和Https请求的工具类,包括如何建立Https连接、如何实现Post请求、如何处理SSL验证等内容。 在Java中,使用HttpURLConnection类可以实现Http和Https请求,但是对于...
Tomcat 发送 HTTPS 请求配置 Tomcat 是一个流行的 Web 服务器软件,用于部署基于 Java 的 Web 应用程序。为了确保数据传输的安全性,需要...同时,我们还提供了一个简单的 Java 代码示例,演示了如何处理 HTTPS 请求。
在提供的代码中,sendsRequestRetry方法是一个核心方法,该方法使用Socket发送HTTP/HTTPS请求,并对请求的结果进行处理。该方法主要完成了以下几个步骤: 1. 创建一个Socket对象,并连接到目标服务器。 2. 发送...
本示例项目“C# HTTP/Https 请求demo”提供了如何在C#中发送HTTP和HTTPS请求的方法,涵盖了GET和POST两种常见的HTTP方法。下面我们将详细探讨这些知识点。 1. **HTTP和HTTPS协议**: - HTTP(超文本传输协议)是...
在处理HTTPS请求时,需要设置`URL.openConnection()`返回的`HttpURLConnection`对象的`setSSLSocketFactory()`方法,通常还需要信任所有证书,避免证书验证错误。例如: ```java SSLContext sslContext = SSL...
总的来说,Java提供了强大的工具来处理HTTPS请求,无论是简单的GET还是复杂的POST,甚至处理自定义证书和性能优化。理解这些知识点对于开发安全的网络应用至关重要。在实际开发中,根据项目需求灵活运用这些技术,...
9. **异常处理**: 在发送HTTPS请求时,可能会遇到如“SSLHandshakeException”、“SocketTimeoutException”等异常,工具类通常会提供适当的错误处理机制。 10. **性能优化**: 通过复用连接、预加载证书和密钥等...
- ESP8266的内存有限,处理复杂的HTTPS请求时需要考虑内存管理,避免请求过大导致内存溢出。 - 考虑到安全性和稳定性,定期更新ESP8266的固件和库,修复可能的安全漏洞。 总结来说,ESP8266发起HTTPS请求涉及到...
在Python中,使用`requests`库时,只要URL以"https://"开头,它会自动处理HTTPS连接。 在实际使用中,可能会遇到认证、代理、重定向等问题。`requests`库处理这些问题非常方便,例如: - 设置认证:使用`auth`参数...
在Java 3.x和4.x版本中,处理HTTPS请求的方法虽然与HTTP基本类似,但需要额外考虑安全性和证书管理。 一、Java HTTPS请求的基本步骤 1. 导入相关库:在进行HTTPS请求之前,需要导入`javax.net.ssl`和`java.net`这...
在 Java 中发送 HTTPS 请求时,正确配置 SSL 上下文和处理自签名证书是非常重要的。通过上述步骤,我们不仅可以确保客户端能够顺利地与服务器建立安全连接,还能有效避免因证书问题而导致的安全隐患。在实际开发过程...
2. 客户端发起一个HTTPS请求,包含请求行、请求头以及空行。 3. 请求行中包含GET方法,以及要请求的URL和HTTP版本。 4. 服务器接收到请求后,返回一个SSL证书,该证书包含公钥和服务器的身份信息。 5. 客户端验证...
而ASIHttpRequest作为一款非常实用且简单的HTTP请求库,在处理HTTPS请求时也有着良好的表现。本文将详细介绍如何使用ASIHttpRequest发起HTTPS请求,并确保数据的安全性。 #### 二、ASIHttpRequest简介 ...
本文将详细讲解如何在Java中处理这类问题,以及如何使用httpUtils工具进行HTTPS请求。 首先,解决数组证书问题的关键在于正确地配置Java的TrustStore。Java的TrustStore包含了系统信任的根证书,如果服务器的证书不...
总之,Java中发送HTTP/HTTPS请求主要涉及`java.net`包中的类,对于HTTPS还需要处理SSL/TLS。对于更复杂的场景,推荐使用Apache HttpClient或其他成熟的HTTP客户端库,它们提供了更多的控制和优化选项。在实际开发中...