https请求比http更安全 是在http的基础上加了SSL数据加密协议。
http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
因为之前写的是版本比较久的https请求方式,下面介绍看到较新的方式:
import java.net.URI; import java.security.cert.CertificateException; import java.security.cert.X509Certificate; import java.util.Map.Entry; import javax.net.ssl.SSLContext; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; import org.apache.http.client.HttpClient; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.utils.URIBuilder; import org.apache.http.conn.ssl.SSLConnectionSocketFactory; import org.apache.http.conn.ssl.SSLContextBuilder; import org.apache.http.conn.ssl.TrustStrategy; import org.apache.http.entity.mime.MultipartEntityBuilder; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; public class HttpClientUtil { public static final Logger logger = LoggerFactory.getLogger(HttpClientUtil.class); public static String doPost(String url, String json) throws Exception { SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() { @Override public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException { return true; } }).build(); SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext); HttpClient httpClient = HttpClients.custom().setSSLSocketFactory(sslsf).build(); HttpPost httppost = new HttpPost(url); MultipartEntityBuilder mEntityBuilder = MultipartEntityBuilder.create(); //params //mEntityBuilder.addTextBody("userName", "1234"); httppost.setEntity(mEntityBuilder.build()); //httppost.addHeader("Content-Type", "Application/JSON"); //其他方法添加参数... /*StringEntity entity = new StringEntity(json, Charsets.UTF_8);//解决中文乱码问题 entity.setContentEncoding("UTF-8"); entity.setContentType("application/json"); httppost.setEntity(entity);*/ int timeOut = 1000*50; // set Timeout RequestConfig requestConfig = RequestConfig.custom().setConnectionRequestTimeout(timeOut) .setConnectTimeout(timeOut).setSocketTimeout(timeOut).build(); httppost.setConfig(requestConfig); // get responce HttpResponse responce = httpClient.execute(httppost); // get http status code int status = responce.getStatusLine().getStatusCode(); System.out.println("request code:" + status); String resultString = null; if (status == HttpStatus.SC_OK) { // get result data HttpEntity entity = responce.getEntity(); resultString = EntityUtils.toString(entity, Charsets.UTF_8); } return resultString; } }
主要看的是这个:
http://www.jsjtt.com/java/JavaWebkaifa/117.html
另外的还有对其原理介绍深入的:
http://www.aneasystone.com/archives/2016/04/java-and-https.html
其他的:
http://blog.csdn.net/shenyunsese/article/details/41075579
相关推荐
虽然`commons-httpclient-3.0.jar`是一个经典版本,但随着Java的发展,Apache社区已经推出了更现代的HttpClient 4.x系列,提供了更多改进和优化,如更好的线程安全、更丰富的API以及对HTTP/2的支持。因此,建议在新...
版本4.5.x系列对HTTP/1.1协议有很好的支持,并引入了对HTTP/2的部分支持。此外,HttpClient还支持异步操作,可以在多线程环境中高效地处理并发请求。 2. **httpcore-4.4.12.jar**:这是HttpClient的核心库,包含了...
- **执行请求**:使用HttpClient的`execute()`方法发送请求,并获取`HttpResponse`对象。 - **处理响应**:从`HttpResponse`中获取状态码、响应头和响应体,通常通过`EntityUtils`类进行读取。 4. 进阶用法: - ...
《Apache Commons HttpClient 3.1:HTTP客户端编程的基石》 ...然而,需要注意的是,HttpClient 3.1已不再维护,最新的稳定版本为HttpClient 4.x,对于新项目建议使用更现代的版本以获取更好的性能和兼容性。
这个"HttpclientDemo(4.x与4以下的版本)"示例显然涵盖了HttpClient在不同版本间的使用方法,特别是4.x版本和4.x之前的版本之间的差异。在本文中,我们将深入探讨HttpClient的基本概念、主要功能以及在不同版本中的...
3. `httpmime-4.x.x.jar`: 这个库扩展了HttpClient,支持在HTTP请求中处理MIME类型的数据,比如文件上传。 4. `httpclient-cache-4.x.x.jar`: 提供了HTTP缓存功能,可以提高重复请求的效率。 5. `json-lib-2.x.x.jar...
尽管HttpClient 3.0在当时是一个强大的工具,但值得注意的是,此版本现在已较为过时,后续已被HttpClient 4.x系列取代,后者提供了更多的改进和新特性。然而,对于仍然使用Java 5或6的项目,HttpClient 3.0仍然是一...
在4.x版本中,HTTPClient进行了重大更新,与之前的3.x版本相比,它引入了更多的功能、优化和改进。本文将深入探讨HTTPClient 4.x的核心特性,并基于提供的"httpclient4.1_examples"示例文件,解析如何使用这个库进行...
标题中的“httpclient-4.3.1.jar”,...在版本号上,4.3.x系列代表了一个稳定的版本,可能比早期版本拥有更好的性能和更多的特性。在使用时,开发者需要根据自己的项目需求和兼容性考虑选择合适的版本。
4. 执行请求:使用HttpClient的`execute`方法发送请求,并获取响应: ```java CloseableHttpResponse response = httpClient.execute(httpGet); ``` 5. 处理响应:解析响应状态和内容,例如: ```java ...
标题 "HTTPClient 4.3.X" 涉及的是Apache HttpClient库的一个版本,这是一个广泛使用的Java库,用于实现客户端HTTP通信。这个库为开发者提供了丰富的功能,包括发送HTTP请求,处理响应,管理连接池,处理cookies,...
在这个"HttpClient发起HTTPs请求.rar"压缩包中,我们主要关注的是如何利用HttpClient处理HTTPS协议的GET和POST请求,以及如何处理返回的JSON数据。这里,我们将详细讨论相关知识点。 首先,HTTPS是一种基于SSL/TLS...
《Apache HttpClient 3.1详解及其在Java中的应用》 Apache HttpClient是一个强大的HTTP客户端实现库...然而,由于HttpClient 3.x已被4.x系列取代,虽然3.1仍可使用,但推荐更新到更现代的版本以获取更多的特性和改进。
这个库提供了对multipart/form-data和application/x-www-form-urlencoded数据格式的支持,使得客户端可以方便地发送包含文件或其他非文本内容的POST请求。例如,在上传文件或使用表单提交时,这个库会非常有用。 在...
3. **执行请求**:调用HttpClient的execute方法发送请求。 4. **处理响应**:获取HttpResponse,并解析其状态码、头部和主体。 5. **关闭资源**:使用完毕后,记得关闭连接以释放系统资源。 总的来说,HttpClient...
HttpClient 4.x版本引入了新的API,增强了性能和稳定性,同时也更加注重线程安全和资源管理。 最后,`httpcore-4.1.4.jar`是HttpClient的基础组件,它是Apache HttpComponents项目的一部分,主要负责HTTP协议的底层...
在使用HttpClient发送POST请求时,我们需要关心两个方面的问题:一是如何忽略证书验证过程,二是如何发送POST请求。对于前者,我们可以使用X509TrustManager来忽略证书验证过程。对于后者,我们可以使用HttpPost对象...
最后,使用HttpClient的execute方法发送请求,并获取HttpResponse对象以处理响应。 在实际应用中,HTTPClient库的高级特性包括: 1. **多路复用**:HTTP/2协议支持多路复用,允许多个HTTP请求共享一个TCP连接,...
6. **执行请求**:使用HttpClient实例的`execute`方法发送请求,并获取`HttpResponse`。 7. **处理响应**:解析`HttpResponse`,获取状态码,读取响应体,可能需要使用`EntityUtils`类。 8. **关闭连接**:记得在...