綁定帳號登入

Android 台灣中文網

打印 上一主題 下一主題

[資料] Android通過https協議與服務器端進行通信

[複製連結] 查看: 1047|回覆: 0|好評: 0
跳轉到指定樓層
樓主
暗桌之光 | 收聽TA | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
發表於 2011-7-24 15:33

馬上加入Android 台灣中文網,立即免費下載應用遊戲。

您需要 登錄 才可以下載或查看,沒有帳號?註冊

x
Https與Http類似,只不過Https一般是通過post請求服務器,但是Https與http不同的是Https與服務器會話是處於連接狀態。http則發送請求後連接就會斷開。
發送post請求代碼:
  1. String query = r4 + "&pass=" + r3; //請求參數
  2.                         byte[] entitydata = query.getBytes();//得到實體數據
  3.                         HttpsURLConnection urlCon = (new URL(ticketurl)).openConnection();
  4.                         urlCon.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
  5.                         urlCon.setRequestProperty("Content-Length", String.valueOf(entitydata.length));
  6.                         ((HttpsURLConnection) urlCon).setRequestMethod("POST");
  7.                         urlCon.setDoOutput(true);
  8.                         urlCon.setDoInput(true);
  9.                         urlCon.connect();

  10.                         //把封裝好的實體數據發送到輸出流
  11.                         OutputStream outStream = urlCon.getOutputStream();
  12.                         outStream.write(entitydata);
  13.                         outStream.flush();
  14.                         outStream.close();

  15.                         //服務器返回輸入流並讀寫
  16.                         BufferedReader in = new BufferedReader(new InputStreamReader(urlCon.getInputStream()));
  17.                         String line;

  18.                         while ((line = in.readLine()) != null) {
  19.                                 return line;
  20.                         }
  21.                         in.close();
複製代碼
另外使用HttpsURLConnection時需要實現HostnameVerifier 和 X509TrustManager,這兩個實現是必須的,要不會報安全驗證異常。然後初始化X509TrustManager中的SSLContext,為javax.net.ssl.HttpsURLConnection設定默認的SocketFactory和HostnameVerifier。代碼如下:
  1.         private myX509TrustManager xtm = new myX509TrustManager();
  2.         private myHostnameVerifier hnv = new myHostnameVerifier();
  3.         
  4.         public HttpsURLConnectionTest() {
  5.                
  6.                 //初始化X509TrustManager中的SSLContext
  7.                 SSLContext sslContext = null;

  8.                 try {
  9.                         sslContext = SSLContext.getInstance("TLS");
  10.                         X509TrustManager[] xtmArray = new X509TrustManager[] { xtm };
  11.                         sslContext.init(null, xtmArray, new java.security.SecureRandom());
  12.                 } catch (GeneralSecurityException gse) {
  13.                         
  14.                 }

  15.                 //為javax.net.ssl.HttpsURLConnection設定默認的SocketFactory和HostnameVerifier
  16.                 if (sslContext != null) {
  17.                         HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());
  18.                 }

  19.                 HttpsURLConnection.setDefaultHostnameVerifier(hnv);
複製代碼
這樣就不會報錯了。
「用Android 就來APK.TW」,快來加入粉絲吧!
Android 台灣中文網(APK.TW)
收藏收藏 分享分享 分享專題
用Android 就來Android 台灣中文網(https://apk.tw)
您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則