`
ft4453080
  • 浏览: 14527 次
  • 性别: Icon_minigender_1
  • 来自: 天津
文章分类
社区版块
存档分类
最新评论

处理https请求

阅读更多
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请求工具类

    本篇文章将深入探讨如何在Java中实现一个用于处理HTTPS请求的工具类。 首先,要实现HTTPS请求,我们需要导入Java的`java.net`和`javax.net.ssl`包,这两个包提供了处理网络连接和SSL/TLS安全协议的类。以下是一些...

    Image_loader的https请求

    `Image_loader`是一个用于处理图片加载的工具,尤其适用于处理HTTPS请求。在这个场景下,我们主要探讨的是如何使用`Image_loader`来处理HTTPS协议的图片请求。 HTTPS(Hypertext Transfer Protocol Secure)是一种...

    Java Https请求,跳过证书,直接访问

    至于提到的"相关jar包全有",这可能指的是用于处理HTTPS请求和SSL连接的Java标准库(如`javax.net.ssl.*`)以及其他可能需要的第三方库,如Apache HttpClient。"TestHttp"可能是一个测试HTTP请求的Java类或文件,你...

    Https请求工具类,Java实现http请求,https请求

    本篇文章将详细介绍如何使用Java语言实现Http和Https请求的工具类,包括如何建立Https连接、如何实现Post请求、如何处理SSL验证等内容。 在Java中,使用HttpURLConnection类可以实现Http和Https请求,但是对于...

    tomcat发送https请求配置

    Tomcat 发送 HTTPS 请求配置 Tomcat 是一个流行的 Web 服务器软件,用于部署基于 Java 的 Web 应用程序。为了确保数据传输的安全性,需要...同时,我们还提供了一个简单的 Java 代码示例,演示了如何处理 HTTPS 请求。

    c#使用Socket发送HTTP/HTTPS请求的实现代码

    在提供的代码中,sendsRequestRetry方法是一个核心方法,该方法使用Socket发送HTTP/HTTPS请求,并对请求的结果进行处理。该方法主要完成了以下几个步骤: 1. 创建一个Socket对象,并连接到目标服务器。 2. 发送...

    C# HTTP/Https 请求demo

    本示例项目“C# HTTP/Https 请求demo”提供了如何在C#中发送HTTP和HTTPS请求的方法,涵盖了GET和POST两种常见的HTTP方法。下面我们将详细探讨这些知识点。 1. **HTTP和HTTPS协议**: - HTTP(超文本传输协议)是...

    https网络请求

    在处理HTTPS请求时,需要设置`URL.openConnection()`返回的`HttpURLConnection`对象的`setSSLSocketFactory()`方法,通常还需要信任所有证书,避免证书验证错误。例如: ```java SSLContext sslContext = SSL...

    HTTPS请求+java

    总的来说,Java提供了强大的工具来处理HTTPS请求,无论是简单的GET还是复杂的POST,甚至处理自定义证书和性能优化。理解这些知识点对于开发安全的网络应用至关重要。在实际开发中,根据项目需求灵活运用这些技术,...

    Java发 Https请求工具类 支持SSL

    9. **异常处理**: 在发送HTTPS请求时,可能会遇到如“SSLHandshakeException”、“SocketTimeoutException”等异常,工具类通常会提供适当的错误处理机制。 10. **性能优化**: 通过复用连接、预加载证书和密钥等...

    esp8266 发起https 请求

    - ESP8266的内存有限,处理复杂的HTTPS请求时需要考虑内存管理,避免请求过大导致内存溢出。 - 考虑到安全性和稳定性,定期更新ESP8266的固件和库,修复可能的安全漏洞。 总结来说,ESP8266发起HTTPS请求涉及到...

    Python 访问http, https请求

    在Python中,使用`requests`库时,只要URL以"https://"开头,它会自动处理HTTPS连接。 在实际使用中,可能会遇到认证、代理、重定向等问题。`requests`库处理这些问题非常方便,例如: - 设置认证:使用`auth`参数...

    java https请求

    在Java 3.x和4.x版本中,处理HTTPS请求的方法虽然与HTTP基本类似,但需要额外考虑安全性和证书管理。 一、Java HTTPS请求的基本步骤 1. 导入相关库:在进行HTTPS请求之前,需要导入`javax.net.ssl`和`java.net`这...

    Java发https请求证书问题

    在 Java 中发送 HTTPS 请求时,正确配置 SSL 上下文和处理自签名证书是非常重要的。通过上述步骤,我们不仅可以确保客户端能够顺利地与服务器建立安全连接,还能有效避免因证书问题而导致的安全隐患。在实际开发过程...

    GET请求https,post请求https

    2. 客户端发起一个HTTPS请求,包含请求行、请求头以及空行。 3. 请求行中包含GET方法,以及要请求的URL和HTTP版本。 4. 服务器接收到请求后,返回一个SSL证书,该证书包含公钥和服务器的身份信息。 5. 客户端验证...

    iOS ASIHttpRequest 请求https

    而ASIHttpRequest作为一款非常实用且简单的HTTP请求库,在处理HTTPS请求时也有着良好的表现。本文将详细介绍如何使用ASIHttpRequest发起HTTPS请求,并确保数据的安全性。 #### 二、ASIHttpRequest简介 ...

    java 发送https 请求 证书

    本文将详细讲解如何在Java中处理这类问题,以及如何使用httpUtils工具进行HTTPS请求。 首先,解决数组证书问题的关键在于正确地配置Java的TrustStore。Java的TrustStore包含了系统信任的根证书,如果服务器的证书不...

    java发送http/https请求(get/post)代码

    总之,Java中发送HTTP/HTTPS请求主要涉及`java.net`包中的类,对于HTTPS还需要处理SSL/TLS。对于更复杂的场景,推荐使用Apache HttpClient或其他成熟的HTTP客户端库,它们提供了更多的控制和优化选项。在实际开发中...

Global site tag (gtag.js) - Google Analytics