Android 以 HTTPS 方式連結讀取 PHP 網頁資訊

//因網路上的解決方案大都以 http 方式處理,但為了安全上的考量我才試著用 https 的方式!

//以下程式碼為正式在使用中的部分代碼

//實際環境為 Android 2.1,2.2 搭配 php5.3 使用

import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import javax.net.ssl.HttpsURLConnection; //與 HTTPS 有關
import javax.net.ssl.SSLContext; //與 HTTPS 有關
import javax.net.ssl.TrustManager; //與 HTTPS 有關
import javax.net.ssl.X509TrustManager; //與 HTTPS 有關

 

 

public class download extends Activity {

 String Check_Result = "";
 String MessageStr = "";

  String  url ="https://www.test.com.tw/get_result.php?P1=XXXX&P2=YYYYY";

  ConnectCheck(url);
           
  if (Check_Result.equals("PASS")) {
   
    //do .....
      }
  else {
    // do ....
  }


 private void ConnectCheck(String path) {
     try {      
   System.setProperty("java.protocol.handler.pkgs","com.sun.net.ssl.internal.www.protocol");
   System.setProperty("javax.net.ssl.trustStore","keystore");
   TrustManager easyTrustManager = new X509TrustManager()
            {
    public java.security.cert.X509Certificate[] getAcceptedIssuers() {
     return null;
    }
    public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType){
    }
    public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) throws java.security.cert.CertificateException {
    }
            };
           
            URL url = new URL(path);
            SSLContext sslcontext = SSLContext.getInstance("TLS");
            sslcontext.init(null, new TrustManager[] { easyTrustManager }, null);
            HttpsURLConnection.setDefaultSSLSocketFactory(sslcontext.getSocketFactory());
            HttpsURLConnection shuc = (HttpsURLConnection) url.openConnection();
            shuc.setDoInput(true);
            shuc.setDoOutput(true); 
            BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));            
            String line = "";


            Check_Result = "PASS";
            while ((line = in.readLine()) != null) {
                String[] names = line.split("#"); //讀取 https://www.test.com.tw/get_result.php?P1=XXXX&P2=YYYYY 以 # 分割的字串

                if (names[0].equals("ERROR") || names[0] == null ) {

                 Check_Result ="Fail!!"; 
                }
            }               
  }
  catch(Exception e)
        {
                e.printStackTrace();
                MessageStr += e.getMessage();
        }   
 }

}

 

 

後記:

請參考 http://jason0615.pixnet.net/blog/post/68611791 為你的web server 加上網頁流量壓縮功能

文章標籤
創作者介紹
創作者 Jason0615 的頭像
Jason0615

吳承軒的部落格

Jason0615 發表在 痞客邦 留言(1) 人氣()


留言列表 (1)

發表留言
  • Roger
  • 您好:
    可以分享一下Server端的PHP的寫法嗎?
    可以直接echo媽還是json呢?
    我想做的是手機APP透過https方式POST資料至網站而網站會回復訊息
    手機對網站傳遞資料一定只能使用網址帶問號的方式嗎?
    感謝回答
  • Server 端的php沒什麼特別的,標準寫法即可!POST 確定是可以的!只有在需要下戴檔案的話須另外處理壓縮及解壓的動作,否則無法節省流量!

    Jason0615 於 2013/04/27 15:02 回覆