2015-10-31
11:27 AM
若要在 Android 內實作 HttpRequest 方法有很多種
但其實最簡單的方式就是使用內建的 HttpURLConnection 來實作
不需要引入其他 Library, 也沒有甚麼前置作業
以下就使用 HttpURLConnection 示範如何實作 HttpGet 要求
並取得網頁內容
不論是 HTML, XML, JSON 方法都相同 不同的地方在於取得內容後的解析方式
此處將止於取得內容字串
若遇到https轉址失效可查看這篇教學
使用 HttpURLConnection 自動轉址失效的解決方式
若要處理 JSON 格式字串可以查看這篇教學
程式碼範例
String urlString = "https://www.google.com.tw/"; HttpURLConnection connection = null; try { // 初始化 URL URL url = new URL(urlString); // 取得連線物件 connection = (HttpURLConnection) url.openConnection(); // 設定 request timeout connection.setReadTimeout(1500); connection.setConnectTimeout(1500); // 模擬 Chrome 的 user agent, 因為手機的網頁內容較不完整 connection.addRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.71 Safari/537.36"); // 設定開啟自動轉址 connection.setInstanceFollowRedirects(true); // 若要求回傳 200 OK 表示成功取得網頁內容 if( connection.getResponseCode() == HttpsURLConnection.HTTP_OK ){ // 讀取網頁內容 InputStream inputStream = connection.getInputStream(); BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(inputStream) ); String tempStr; StringBuffer stringBuffer = new StringBuffer(); while( ( tempStr = bufferedReader.readLine() ) != null ) { stringBuffer.append( tempStr ); } bufferedReader.close(); inputStream.close(); // 取得網頁內容類型 String mime = connection.getContentType(); boolean isMediaStream = false; // 判斷是否為串流檔案 if( mime.indexOf("audio") == 0 || mime.indexOf("video") == 0 ){ isMediaStream = true; } // 網頁內容字串 String responseString = stringBuffer.toString(); } } catch (IOException e) { e.printStackTrace(); } finally { // 中斷連線 if( connection != null ) { connection.disconnect(); } }
各項資料連結
Android - 使用 HttpURLConnection 自動轉址失效的解決方式
Java - JSON 資料解析基本教學
Android HttpURLConnection
No comments:
Post a Comment