Android HttpClient(Cookie & sslexception)

private static HashMap<String,String>  CookieContiner=new HashMap<String,String>() ;
    /**
	 * 保存Cookie
	 * @param resp
	 */
    public void SaveCookies(HttpResponse httpResponse)
    {
    	Header[] headers = httpResponse.getHeaders("Set-Cookie");
    	String headerstr=headers.toString();
        if (headers == null)
            return;

        for(int i=0;i<headers.length;i++)
        {
        	String cookie=headers[i].getValue();
        	String[]cookievalues=cookie.split(";");
        	for(int j=0;j<cookievalues.length;j++)
        	{
        		String[] keyPair=cookievalues[j].split("=");
        		String key=keyPair[0].trim();
        		String value=keyPair.length>1?keyPair[1].trim():"";
        		CookieContiner.put(key, value);
        	}
        }
    }
    /**
     * 增加Cookie
     * @param request
     */
    public void AddCookies(HttpPost request)
    {
        StringBuilder sb = new StringBuilder();
        Iterator iter = CookieContiner.entrySet().iterator();
        while (iter.hasNext()) {
          Map.Entry entry = (Map.Entry) iter.next();
          String key = entry.getKey().toString();
          String val = entry.getValue().toString();
          sb.append(key);
          sb.append("=");
          sb.append(val);
          sb.append(";");
        }
        request.addHeader("cookie", sb.toString());
    }

----------------------------------------
cookie rejected 解决方法
 
 
/**
 * 获得httpclient实例
 * @param hparams
 * @return
 */
public HttpClient getHttpClient(){
DefaultHttpClient httpClient = new DefaultHttpClient();
httpClient.getCookieSpecs().register("easy", csf);
httpClient.getParams().setParameter(ClientPNames.COOKIE_POLICY, "easy");
        HttpConnectionParams.setConnectionTimeout(httpClient.getParams(), 2000);
        return httpClient;
}
// customer cookie policy, ignore cookie check
CookieSpecFactory csf = new CookieSpecFactory() {
    public CookieSpec newInstance(HttpParams params) {
        return new BrowserCompatSpec() {   
            @Override
            public void validate(Cookie cookie, CookieOrigin origin)
            throws MalformedCookieException {
                // Oh, I am easy
            }
        };
    }
};
-------------------------------------------------
SSLException

遇到服务器SSL证书无效会出现哪些异常?有如何处理?

正常情况下,如果SSL证书无效,那么java会抛出SSLException。在Oauth授权的时候,如果碰到SSLException异常,我们就无法获取oauth_token和oauth_token_secret了。

解决方法很简单:那就是直接信任所有的证书,而不去检查证书的有效性。下面有个网上提供的类,使用的时候只要在联网前调用该类的allowAllSSL()函数即可。

  1. public class _FakeX509TrustManager implements X509TrustManager {  
  2.   
  3.     private static TrustManager[] trustManagers;  
  4.     private static final X509Certificate[] _AcceptedIssuers = new  
  5.     X509Certificate[] {};  
  6.   
  7.     @Override  
  8.     public void checkClientTrusted(X509Certificate[] chain, String  
  9.             authType) throws CertificateException {  
  10.     }  
  11.   
  12.     @Override  
  13.     public void checkServerTrusted(X509Certificate[] chain, String  
  14.             authType) throws CertificateException {  
  15.     }  
  16.   
  17.     public boolean isClientTrusted(X509Certificate[] chain) {  
  18.         return true;  
  19.     }  
  20.   
  21.     public boolean isServerTrusted(X509Certificate[] chain) {  
  22.         return true;  
  23.     }  
  24.   
  25.     @Override  
  26.     public X509Certificate[] getAcceptedIssuers() {  
  27.         return _AcceptedIssuers;  
  28.     }  
  29.   
  30.     public static void allowAllSSL() {  
  31.         HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier(){  
  32.   
  33.             @Override  
  34.             public boolean verify(String arg0, SSLSession arg1) {  
  35.                 // TODO Auto-generated method stub   
  36.                 return true;  
  37.             }  
  38.   
  39.         });  
  40.   
  41.         SSLContext context = null;  
  42.         if (trustManagers == null) {  
  43.             trustManagers = new TrustManager[] { new _FakeX509TrustManager() };  
  44.         }  
  45.   
  46.         try {  
  47.             context = SSLContext.getInstance("TLS");  
  48.             context.init(null, trustManagers, new SecureRandom());  
  49.         } catch (NoSuchAlgorithmException e) {  
  50.             e.printStackTrace();  
  51.         } catch (KeyManagementException e) {  
  52.             e.printStackTrace();  
  53.         }  
  54.   
  55.         HttpsURLConnection.setDefaultSSLSocketFactory(context.getSocketFactory());  
  56.     }  
  57.   
  58. }   

使用实例:

_FakeX509TrustManager.allowAllSSL();//调用

URL postUrl = new URL("https://open.t.qq.com/cgi-bin/request_token?"+params);

URL postUrl = new URL("http://www.linuxidc.com"); 

HttpURLConnection con = (HttpURLConnection) postUrl.openConnection();

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值