Https通信工具类

  记录一个在微信开发中用到的https通信工具类,以后会用到的。

  

  用于https通信的证书信任管理器

import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;

import javax.net.ssl.X509TrustManager;

/**
 * 证书信任管理器(用于https请求)
 */
public class MyX509TrustManager implements X509TrustManager {
    /**
     * create by yyc 2017年6月27日上午10:24:49
     */
    @Override
    public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {
        // TODO Auto-generated method stub

    }

    /**
     * create by yyc 2017年6月27日上午10:24:49
     */
    @Override
    public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {
        // TODO Auto-generated method stub

    }

    /**
     * create by yyc 2017年6月27日上午10:24:49
     */
    @Override
    public X509Certificate[] getAcceptedIssuers() {
        // TODO Auto-generated method stub
        return null;
    }
} 

  httpRequest方法,就是用于https通信的,方法传入请求的url,请求的方式(如:GET,POST),请求发送的数据等

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ConnectException;
import java.net.URL;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import org.apache.commons.httpclient.HttpStatus;

/**
 * 编写一个用于发起https请求的工具类WeiXinNetWorkUtil 访问网络用到的工具类
 */
public class WeiXinNetWorkUtil {
    /**
     * 发起Https请求
     *
     * @param reqUrl
     *            请求的URL地址
     * @param requestMethod
     *            请求的方法
     * @param outputStr
     *            提交的数据
     * @return 响应后的字符串(可能是json、xml或其它,但都是String型的) httpRequest方法是请求一个https地址,
     *         参数requestMethod为字符串“GET”或者“POST”,传null或者“”默认为get方式,
     *         参数outputStr为一个要提交的字符串,不为""或null时,requestMethod为“POST”。
     */
    public static String httpRequest(String reqUrlString, String requestMethod, String outputStr) {
        URL url;
        HttpsURLConnection conn = null;
        InputStream inputStream = null;
        InputStreamReader inputStreamReader = null;
        BufferedReader bufferReader = null;
        StringBuffer resultData = new StringBuffer();
        try {
            // 创建url资源
            url = new URL(reqUrlString);
            // 建立http连接
            conn = (HttpsURLConnection) url.openConnection();

            // 创建SSLContext对象,并使用我们指定的信任管理器初始化
            TrustManager[] tm = { new MyX509TrustManager() };

            SSLContext ctx = SSLContext.getInstance("SSL", "SunJSSE");
            ctx.init(null, tm, new java.security.SecureRandom());

            conn.setSSLSocketFactory(ctx.getSocketFactory());
            conn.setHostnameVerifier(new HostnameVerifier() {
                @Override
                public boolean verify(String arg0, SSLSession arg1) {
                    return true;
                }
            });

            conn.setDoInput(true); // 允许输入流,即允许下载

            conn.setDoOutput(true); // 允许输出流,即允许上传
            conn.setUseCaches(false); // 是否使用缓冲
            if (null != requestMethod && !"".equals(requestMethod)) {
                conn.setRequestMethod(requestMethod); // 使用指定的方式
            } else {
                conn.setRequestMethod("GET"); // 使用get请求
            }

            // 当有数据需要提交时
            if (null != outputStr && !"".equals(outputStr)) {
                OutputStream outputStream = conn.getOutputStream();
                // 注意编码格式,防止中文乱码
                outputStream.write(outputStr.getBytes("UTF-8"));
                outputStream.flush();
                // 释放资源
                if (outputStream != null) {
                    outputStream.close();
                    outputStream = null;
                }
            }

            conn.connect();// 开始连接请求

            // 请求返回的状态
            if (conn.getResponseCode() == HttpStatus.SC_OK) {

                System.out.println("https网络连接成功,返回码:"+conn.getResponseCode());
                inputStream = conn.getInputStream(); // 获取输入流
                inputStreamReader = new InputStreamReader(inputStream);
                bufferReader = new BufferedReader(inputStreamReader);
                String inputLine;
                while ((inputLine = bufferReader.readLine()) != null) {// 将返回的输入流转换成字符串
                    resultData.append(inputLine + "\n");
                }

                // 释放资源
                if (bufferReader != null) {
                    bufferReader.close();
                    bufferReader = null;
                }
                if (inputStreamReader != null) {
                    inputStreamReader.close();
                    inputStreamReader = null;
                }
                if (inputStream != null) {
                    inputStream.close();
                    inputStream = null;
                }
            }else{
                System.out.println("https网络连接错误,错误码:"+conn.getResponseCode());
            }
        } catch (ConnectException ce) {
            System.err.println("Weixin server connection timed out.");
            ce.printStackTrace();
        } catch (Exception e) {
            System.err.println("https request error.");
            e.printStackTrace();
        } finally {
            // 断开网络连接
            conn.disconnect();
        }

        return resultData.toString();
    }

}
时间: 2024-10-23 22:39:36

Https通信工具类的相关文章

我的Android进阶之旅------>Android关于HttpsURLConnection一个忽略Https证书是否正确的Https请求工具类

下面是一个Android HttpsURLConnection忽略Https证书是否正确的Https请求工具类,不需要验证服务器端证书是否正确 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.UnsupportedEn

Https联网工具类

Https联网工具类 get  post 调用时 只需传入url,和要提交的参数queryString  有cookie时也可以传入 放回的是字符串 连接方式我在Http里解决了你们只需要拼接对 拼接格式 路径:https://emall.licaike.com/weixin/web/bind?        参数:loginInit=loginInit&knowChannel=APP_LCK_ADR_KC import java.io.ByteArrayOutputStream; import

https请求工具类

import java.io.IOException;import java.io.UnsupportedEncodingException;import java.lang.reflect.Field;import java.security.KeyManagementException;import java.security.NoSuchAlgorithmException;import java.security.cert.CertificateException;import java

Android-HttpsURLConnectionHelp工具类

Java版(HttpURLConnection)Https请求工具类 public class HttpsURLConnectionHelp { /** * 加密协议 */ public static TrustManager truseAllManager = new X509TrustManager() { public void checkClientTrusted( java.security.cert.X509Certificate[] arg0, String arg1) throw

捕获异常、存sd卡、封装请求头体、加密map值、网络工具类、生成Json、Https协议、传log日志到服务器、app崩溃友好重启

点击打开链接,免积分下载 在集成了统计SDK(友盟统计,百度统计等)之后,有一个非常有利于测试的功能:错误分析!此功能能够将程序在运行中碰到的崩溃(runtimeException)问题反馈到服务器,帮助开发者改善产品,多适配机器.然而在公司android开发中不集成这些SDK,那应该怎么实现这样的功能呢?下面让我们来看下如何使用UncaughtExceptionHandler来捕获异常. 在Android开发中,常常会出现uncheched Exception 导致程序的crash,为了提供良

基于HttpClient 4.3的可访问自签名HTTPS站点的新版工具类

本文出处:http://blog.csdn.net/chaijunkun/article/details/40145685,转载请注明.由于本人不定期会整理相关博文,会对相应内容作出完善.因此强烈建议在原始出处查看此文. HttpClient在当今Java应用中的位置越来越重要.从该项目的变迁过程我们不难发现,其已经从apache-commons众多的子项目中剥离,一跃成为如今的顶级项目,可见它的分量.然而随着项目的升级和架构的调整,很多以前常用的类和方法都已被打上了@Deprecated注解,

基于HttpClient 4.3的可訪问自签名HTTPS网站的新版工具类

本文出处:http://blog.csdn.net/chaijunkun/article/details/40145685,转载请注明.因为本人不定期会整理相关博文,会对相应内容作出完好.因此强烈建议在原始出处查看此文. HttpClient在当今Java应用中的位置越来越重要.从该项目的变迁过程我们不难发现,其已经从apache-commons众多的子项目中剥离,一跃成为现在的顶级项目.可见它的分量.然而随着项目的升级和架构的调整.非常多曾经经常使用的类和方法都已被打上了@Deprecated

发送http请求和https请求的工具类

package com.haiyisoft.cAssistant.utils; import java.io.IOException;import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; import org.apache.http.HttpEntity; import org.apache.ht

java Https工具类

import java.security.cert.CertificateException; import java.security.cert.X509Certificate; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; import javax.net.ssl.SSLContext