• 重写方法Android中的HttpsURLConnection连接


    在写这篇文章之前,xxx已经写过了几篇关于改重写方法主题的文章,想要了解的朋友可以去翻一下之前的文章

        每日一道理
    能够破碎的人,必定真正活过。林黛玉的破碎,在于她有刻骨铭心的爱情;三毛的破碎,源于她历经沧桑后一刹那的明彻与超脱;凡高的破碎,是太阳用黄金的刀子让他在光明中不断剧痛,贝多芬的破碎,则是灵性至极的黑白键撞击生命的悲壮乐章。如果说那些平凡者的破碎泄漏的是人性最纯最美的光点,那么这些优秀的灵魂的破碎则如银色的梨花开满了我们头顶的天空。
    package com.LeadingGH.Core;
    
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.net.URL;
    
    import java.io.*;
    import java.net.*;
    import java.security.*;
    import java.security.cert.*;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Map;
    import java.util.Set;
    
    import javax.net.ssl.*;
    
    import android.preference.PreferenceManager;
    
    import com.LeadingGH.Util.Base64;
    
    
    public class VPNAuth
    {
    
    	public String url = "";
    	public String cookie = "";
    
    	private myX509TrustManager xtm = new myX509TrustManager();
    
    	private myHostnameVerifier hnv = new myHostnameVerifier();
    
    	public VPNAuth(String loginName,String loginPwd,String urlAddress)
    	{
    		SSLContext sslContext = null;
    		if(loginName.equals("") || urlAddress.equals(""))
    			return;
    		try
    		{
    			url = urlAddress+"/SSL/user/PasswordUserLogin?Integrate=true&LoginName="
    					+ Base64.encode(loginName.getBytes())
    					+ "&SMS=false&AutoLogin=false&IsTwoAuth=0&LoginPassword="
    					+ Base64.encode(loginPwd.getBytes())
    					+ "&APCCode=4567&APCPassword=4567";
    			
    			sslContext = SSLContext.getInstance("SSL"); // 或SSL
    			
    			X509TrustManager[] xtmArray = new X509TrustManager[]{ xtm };
    			
    			sslContext.init(null, xtmArray, new java.security.SecureRandom());
    		} 
    		catch (GeneralSecurityException e)
    		{
    			e.printStackTrace();
    		}
    		if (sslContext != null)
    		{
    			HttpsURLConnection.setDefaultSSLSocketFactory(sslContext
    					.getSocketFactory());
    		}
    		HttpsURLConnection.setDefaultHostnameVerifier(hnv);
    		run(url,"");
    	}
    	
    	public void VPNLogOut()
    	{
    		String strUrl = "https://58.16.4.27/SSL/user/UserLogout?SMS=false&CS=false&Close=false&Name="+Base64.encode("test".getBytes());
    		run(strUrl,"");
    		cookie= "";
    	}
    	
    	public String run(String strUrl,String postXML)
    	{
    		HttpsURLConnection urlCon = null;
    		URL urlInstance = null;
    		String firstCookie = "";
    		String returnVal = "";
    		StringBuffer sb = new StringBuffer();
    		try
    		{
    			String params = URLEncoder.encode(postXML);
    			params = "AcceptXML=" + params;
    			urlInstance = new URL(strUrl);
    			urlCon = (HttpsURLConnection) (urlInstance).openConnection();
    			urlCon.setInstanceFollowRedirects(false);
    			urlCon.setDoOutput(true);
    			urlCon.setDoInput(true);
    			urlCon.setRequestMethod("POST");
    			urlCon.setRequestProperty("Cookie", cookie);
    			urlCon.setRequestProperty("Content-Type","application/x-www-form-urlencoded;charset=UTF-8");
    			urlCon.setRequestProperty("Connection", "Keep-Alive");
    			urlCon.connect();
    			byte[] bpara = params.toString().getBytes(); 
    			urlCon.getOutputStream().write(bpara, 0, bpara.length); 
    			urlCon.getOutputStream().flush(); 
    			urlCon.getOutputStream().close(); 
    
    
    
    			BufferedReader reader = new BufferedReader(new InputStreamReader(
    					urlCon.getInputStream()));
    			String redictURL = urlCon.getHeaderField("Location");
    			String msg = urlCon.getResponseMessage();
    			
    
    			Map<String, List<String>> map = urlCon.getHeaderFields();
    			Set<String> set = map.keySet();
    			for (Iterator iterator = set.iterator(); iterator.hasNext();)
    			{
    				String key = (String) iterator.next();
    				if (key!=null && key.equals("Set-Cookie"))
    				{
    					System.out.println("key=" + key + ",开始取获cookie");
    					List<String> list = map.get(key);
    					StringBuilder builder = new StringBuilder();
    					for (String str : list)
    					{
    						builder.append(str).toString();
    					}
    					firstCookie = builder.toString();
    					System.out.println("第一次失掉的cookie=" + firstCookie);
    					if(cookie=="")
    					{
    						cookie = firstCookie;
    					}
    				}
    			}
    			
    			String line = null;
    			while ((line = reader.readLine()) != null)
    			{
    				sb.append(line);
    			}
    			reader.close();
    			Integer statusCode = urlCon.getResponseCode();
    			if(sb != null)
    			{
    				returnVal = URLDecoder.decode(sb.toString(),"utf-8");
    			}
    
    		} catch (MalformedURLException e)
    		{
    			e.printStackTrace();
    		} catch (IOException e)
    		{
    			e.printStackTrace();
    		} catch (Exception e)
    		{
    			e.printStackTrace();
    		} finally
    		{
    			if (urlCon != null)
    			{
    				urlCon.disconnect();
    			}
    			if (urlInstance != null)
    			{
    				urlInstance = null;
    			}
    		}
    		return returnVal;
    	}
    
    	/** */
    	/**
    	 * 重写三个方法
    	 * 
    	 * @author Administrator
    	 * 
    	 */
    	class myX509TrustManager implements X509TrustManager
    	{
    
    		public void checkClientTrusted(X509Certificate[] chain, String authType)
    		{
    		}
    
    		public void checkServerTrusted(X509Certificate[] chain, String authType)
    		{
    			System.out.println("cert: " + chain[0].toString() + ", authType: "
    					+ authType);
    		}
    
    		public X509Certificate[] getAcceptedIssuers()
    		{
    			return null;
    		}
    	}
    
    	/** */
    	/**
    	 * 重写一个方法
    	 * 
    	 * @author Administrator
    	 * 
    	 */
    	class myHostnameVerifier implements HostnameVerifier
    	{
    
    		public boolean verify(String hostname, SSLSession session)
    		{
    			System.out.println("Warning: URL Host: " + hostname + " vs. "
    					+ session.getPeerHost());
    			return true;
    		}
    	}
    }

    文章结束给大家分享下程序员的一些笑话语录: 一程序员告老还乡,想安度晚年,于是决定在书法上有所造诣。省略数字……,准备好文房4宝,挥起毛笔在白纸上郑重的写下:Hello World

  • 相关阅读:
    5-最长回文子串
    String、StringBuffer和StringBuilder的区别(转载)
    LeetCode31题,下一个排列
    BindingResult
    @Validated 和 @Valid
    springboot Filter Interceptor
    @ReponseStatus
    ResponseEntity
    springboot 异常处理机制源码分析
    @RequestMapping的produces作用
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3040932.html
Copyright © 2020-2023  润新知