zoukankan      html  css  js  c++  java
  • 带jsk证书,请求https接口

    首先是三个返回的实体类

    BaseVo.java 

    package https2;
    
    import java.io.Serializable;
    import java.lang.reflect.InvocationTargetException;
    import java.util.ArrayList;
    import java.util.List;
    
    public class BaseVo implements Serializable {
    
    	private static final long serialVersionUID = 1L;
    
    	public List<String> getField(Object model) {
    		List<String> list = new ArrayList<String>();
    
    		java.lang.reflect.Method[] method = model.getClass().getDeclaredMethods();// 获取对象所有方法
    		for (java.lang.reflect.Method m : method) {
    			
    			if (m.getName().startsWith("get")) {// 获取get方法
    				Object o = null;
    				try {
    					o = m.invoke(model);
    				} catch (IllegalAccessException e) {
    					// TODO Auto-generated catch block
    					e.printStackTrace();
    				} catch (IllegalArgumentException e) {
    					// TODO Auto-generated catch block
    					e.printStackTrace();
    				} catch (InvocationTargetException e) {
    					// TODO Auto-generated catch block
    					e.printStackTrace();
    				}// 执行
    				if (o == null ) {
    					list.add("");
    				} else {
    					list.add(o.toString());
    				}
    			}
    		}
    		return list;
    	}
    }
    

      

    PageVo.java

    package https2;
    
    public class PageVo extends BaseVo {
    	/**
    	 * 
    	 */
    	private static final long serialVersionUID = 1L;
    	private int current=1;//当前第几页
    	private int currentNum=1;//当前第几页
    	private int total;//总数
    	private int pages;//页数
    	private int number = 15;//每页多少条
    	private String column;
    	private String order;
    
    	public int getCurrentNum() {
    		return currentNum;
    	}
    	
    	public String getColumn() {
    		return column;
    	}
    	public void setColumn(String column) {
    		this.column = column;
    	}
    	public String getOrder() {
    		return order;
    	}
    	public void setOrder(String order) {
    		this.order = order;
    	}
    	public int getNumber() {
    		return number;
    	}
    	public void setNumber(int number) {
    		this.number = number;
    	}
    	public int getCurrent() {
    		return current;
    	}
    	public void setCurrent(int current) {
    		this.current = current;
    		this.currentNum = current;
    	}
    	public int getTotal() {
    		return total;
    	}
    	public void setTotal(int total) {
    		this.total = total;
    		if(this.total%this.number==0){
    			this.pages = this.total / this.number;
    		}else{
    			this.pages = this.total / this.number + 1;
    		}
    	}
    	public int getPages() {
    		return pages;
    	}
    	public void setPages(int pages) {
    		this.pages = pages;
    	}
    	
    }
    

      

    ResultVo.java

    package https2;
    
    public class ResultVo extends BaseVo{
    	/**
    	 * 
    	 */
    	private static final long serialVersionUID = 1L;
    	
    	private String code;
    	private String msg;
    	private Object data;
    	private PageVo page;
    	
    	
    	public PageVo getPage() {
    		return page;
    	}
    	public void setPage(PageVo page) {
    		this.page = page;
    	}
    	public String getCode() {
    		return code;
    	}
    	public void setCode(String code) {
    		this.code = code;
    	}
    	public String getMsg() {
    		return msg;
    	}
    	public void setMsg(String msg) {
    		this.msg = msg;
    	}
    	public Object getData() {
    		return data;
    	}
    	public void setData(Object data) {
    		this.data = data;
    	}
    	
    	
    }
    

      

    然后是一个工具类

    package https2;
    
    import javax.net.ssl.HostnameVerifier;
    import javax.net.ssl.SSLSession;
    
    public class HostnameVerifierUtil implements HostnameVerifier {
    
    	@Override
    	public boolean verify(String hostname, SSLSession arg1) {
    		if("localhost".equals(hostname)){  
                return true;  
            } else {  
                return false;  
            } 
    	}
    
    }
    

      

    最后是https请求工具类

    package https2;
    
    import java.io.BufferedReader;  
    import java.io.FileInputStream;  
    import java.io.IOException;  
    import java.io.InputStreamReader;  
    import java.net.MalformedURLException;  
    import java.net.URL;  
    import java.security.GeneralSecurityException;  
    import java.security.KeyStore;  
    
    import javax.net.ssl.HttpsURLConnection;  
    import javax.net.ssl.KeyManagerFactory;  
    import javax.net.ssl.SSLContext;  
    import javax.net.ssl.TrustManagerFactory;  
    import cn.smartercampus.core.vo.ResultVo;
    
    import com.alibaba.fastjson.JSON;
      
    public class HttpsPost {  
        /** 
         * 获得KeyStore. 
         * @param keyStorePath 
         *            密钥库路径 
         * @param password 
         *            密码 
         * @return 密钥库 
         * @throws Exception 
         */  
        public static KeyStore getKeyStore(String password, String keyStorePath)  
                throws Exception {  
            // 实例化密钥库  
            KeyStore ks = KeyStore.getInstance("JKS");  
            // 获得密钥库文件流  
            FileInputStream is = new FileInputStream(keyStorePath);  
            // 加载密钥库  
            ks.load(is, password.toCharArray());  
            // 关闭密钥库文件流  
            is.close();  
            return ks;  
        }  
        
        /** 
         * 获得SSLSocketFactory. 
         * @param password 
         *            密码 
         * @param keyStorePath 
         *            密钥库路径 
         * @param trustStorePath 
         *            信任库路径 
         * @return SSLSocketFactory 
         * @throws Exception 
         */  
        public static SSLContext getSSLContext(String password,  
                String keyStorePath, String trustStorePath) throws Exception {  
            // 实例化密钥库  
            KeyManagerFactory keyManagerFactory = KeyManagerFactory  
                    .getInstance(KeyManagerFactory.getDefaultAlgorithm());  
            // 获得密钥库  
            KeyStore keyStore = getKeyStore(password, keyStorePath);  
            // 初始化密钥工厂  
            keyManagerFactory.init(keyStore, password.toCharArray());  
      
            // 实例化信任库  
            TrustManagerFactory trustManagerFactory = TrustManagerFactory  
                    .getInstance(TrustManagerFactory.getDefaultAlgorithm());  
            // 获得信任库  
            KeyStore trustStore = getKeyStore(password, trustStorePath);  
            // 初始化信任库  
            trustManagerFactory.init(trustStore);  
            // 实例化SSL上下文  
            SSLContext ctx = SSLContext.getInstance("TLS");  
            // 初始化SSL上下文  
            ctx.init(keyManagerFactory.getKeyManagers(),  
                    trustManagerFactory.getTrustManagers(), null);  
            // 获得SSLSocketFactory  
            return ctx;  
        }  
      
        /** 
         * 初始化HttpsURLConnection. 
         * @param password 
         *            密码 
         * @param keyStorePath 
         *            密钥库路径 
         * @param trustStorePath 
         *            信任库路径 
         * @throws Exception 
         */  
        public static void initHttpsURLConnection(String password,  
                String keyStorePath, String trustStorePath) throws Exception {  
            // 声明SSL上下文  
            SSLContext sslContext = null;  
            // 实例化主机名验证接口  
            HostnameVerifierUtil hnv = new HostnameVerifierUtil();  
            try {  
                sslContext = getSSLContext(password, keyStorePath, trustStorePath);  
            } catch (GeneralSecurityException e) {  
                e.printStackTrace();  
            }  
            if (sslContext != null) {  
                HttpsURLConnection.setDefaultSSLSocketFactory(sslContext  
                        .getSocketFactory());  
            }  
            HttpsURLConnection.setDefaultHostnameVerifier(hnv);  
        }  
      
        /** 
         * 发送请求. 
         * @param httpsUrl 
         *            请求的地址 
         * @param xmlStr 
         *            请求的数据 
         */  
        public static ResultVo post(String httpsUrl, String xmlStr) {  
            HttpsURLConnection urlCon = null;  
            try {  
                urlCon = (HttpsURLConnection) (new URL(httpsUrl)).openConnection();  
                urlCon.setDoInput(true);  
                urlCon.setDoOutput(true);  
                urlCon.setRequestMethod("POST");  
                urlCon.setRequestProperty("Content-Length",  
                        String.valueOf(xmlStr.getBytes().length));  
                urlCon.setUseCaches(false);  
                
                urlCon.getOutputStream().write(xmlStr.getBytes("UTF-8"));  
                urlCon.getOutputStream().flush();  
                urlCon.getOutputStream().close();  
                BufferedReader in = new BufferedReader(new InputStreamReader(  
                        urlCon.getInputStream()));  
                String line; 
                StringBuffer resultStr = new StringBuffer();
                while ((line = in.readLine()) != null) {  
                	resultStr.append(line);  
                }  
                System.out.println(resultStr.toString());
                ResultVo resultVo = JSON.parseObject(resultStr.toString(), ResultVo.class);
                return resultVo;
            } catch (MalformedURLException e) {  
                e.printStackTrace();  
            } catch (IOException e) {  
                e.printStackTrace();  
            } catch (Exception e) {  
                e.printStackTrace();  
            }
    		return null;  
        }  
      
        /** 
         * 测试方法. 
         * @param args 
         * @throws Exception 
         */  
        public static void main(String[] args) throws Exception {  
        	 // 密码  
            String password = "";  
            // 密钥库  
            String keyStorePath = "";  
            // 信任库  
            String trustStorePath = "";  
            // 本地起的https服务  
            String httpsUrl = "";  
            // 传输文本  
            String xmlStr = "";  
            HttpsPost.initHttpsURLConnection(password, keyStorePath, trustStorePath);  
            // 发起请求  
            HttpsPost.post(httpsUrl, xmlStr);  
        }  
    }
    

      

    jar 包 fastjson-1.1.27.jar 、log4j-1.2.11.jar

    链接:https://pan.baidu.com/s/1UAGUmc7PhUT0Db65YuQMiA
    提取码:s70w



  • 相关阅读:
    Android的读写文件及权限设置
    surfaceView和View的区别
    git的常见问题
    APP的缓存文件放在哪里?
    AndroidStudio遇到过的问题
    订单和支付状态不同步解决方法
    支付宝支付不成功原因
    格式化输出%s和%S的区别
    Android SDK更新下载失败以及Studio首次安装取消自动下载SDK
    SPOJ 104 HIGH
  • 原文地址:https://www.cnblogs.com/remember-forget/p/9945628.html
Copyright © 2011-2022 走看看