您的位置:首页 > 理论基础 > 计算机网络

访问https接口,进行数据交互(已在实际项目中使用)

2012-06-27 17:25 751 查看
前言: 
      在android开发中,会涉及到安全比较高的业务,比如银行,网上交易等,这就涉及到https协议的交互 
    对于https 交互过程分两个阶段 
    1. 客户端获取服务器的证书,并验证证书的内容是否可信 
     2. 客户端和服务器端进行握手协议,并进行数据传输 
   
    对于https 交互过程,第一点,采用了网站可信的方式,如有需要验证域名和证书是否一致的,请自我扩展 
   实现的过程: 
   1): 注册scheme of https 
    注意: 
HostnameVerifier hostnameVerifier = org.apache.http.conn.ssl.SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER; 
如果需要验证,则,自己继承HostnameVerifier ,并实现接口。 
    2):获取 httpClient 和 httpPost 
    3):获取数据 
下面是实现的源码,参数就是https路径: 
1   public String GetData(String URL) 
2       { 
3           String returns=""; 
4         
5           //Step One  register scheme of https 
6           HostnameVerifier hostnameVerifier = org.apache.http.conn.ssl.SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER;         
7          
8           SchemeRegistry registry = new SchemeRegistry();   
9           SSLSocketFactory socketFactory = SSLSocketFactory.getSocketFactory();   
10           socketFactory.setHostnameVerifier((X509HostnameVerifier) hostnameVerifier);   
11           registry.register(new Scheme("https", socketFactory, 443)); 
12           registry.register(new Scheme("http",PlainSocketFactory.getSocketFactory (), 80)); 
13           
14           //Step Two  Get httpClient and httpPost 
15           
16           DefaultHttpClient client = new DefaultHttpClient();  
17           SingleClientConnManager mgr = new SingleClientConnManager(client.getParams(), registry);       
18           DefaultHttpClient httpClient = new DefaultHttpClient(mgr, client.getParams());      
19           //------- Set verifier    
20           HttpsURLConnection.setDefaultHostnameVerifier(hostnameVerifier);     
21           // -------Example send http request      
22          // final String url = "https://martinreichart.com/_tmpdata/login_valid.json";      
23           HttpPost httpPost = new HttpPost(URL);     
24         
25           //Step Three Get Data 
26           try { 
27               HttpResponse response = httpClient.execute(httpPost); 
28               if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {  
29                // 解析返回的内容   
30                 returns = EntityUtils.toString(response.getEntity());         
31              } 
32           } 
33           catch(Exception ex) 
34           { 
35               
36               String aa =ex.toString(); 
37           } 
38           
39           return returns; 
40       }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐