重写方法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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值