使用HttpURLConnection採用Post方式請求資料
阿新 • • 發佈:2019-02-09
1. 服務端
doPost(){
doGet(request,response);
}
2. Post方式不在URL後面加資料,而是用流的方式傳遞;GET在URL後傳輸資料
3. 是否傳遞---請求頭:setRequestProperty();
MainActivity中:
public void doPost(View v) { final String userName = etUserName.getText().toString(); final String password = etPassword.getText().toString(); new Thread(new Runnable() { @Override public void run() { final String state = NetUtils.loginOfPost(userName, password); // 執行任務在主執行緒中 runOnUiThread(new Runnable() { @Override public void run() { // 就是在主執行緒中操作 Toast.makeText(MainActivity.this, state, 0).show(); } }); } }).start(); }
loginOfPost方法:
/** * 使用post的方式登入 * @param userName * @param password * @return */ public static String loginOfPost(String userName, String password) { HttpURLConnection conn = null; try { URL url = new URL("http://10.0.2.2:8080/ServerItheima28/servlet/LoginServlet"); conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("POST"); conn.setConnectTimeout(10000); // 連線的超時時間 conn.setReadTimeout(5000); // 讀資料的超時時間 conn.setDoOutput(true); // 必須設定此方法, 允許輸出****** 預設情況下, 系統不允許向伺服器輸出內容 // conn.setRequestProperty("Content-Length", 234); // 設定請求頭訊息, 可以設定多個 // post請求的引數 String data = "username=" + userName + "&password=" + password; // 獲得一個輸出流, 用於向伺服器寫資料, 預設情況下, 系統不允許向伺服器輸出內容 OutputStream out = conn.getOutputStream(); out.write(data.getBytes()); out.flush(); out.close(); int responseCode = conn.getResponseCode(); if(responseCode == 200) { InputStream is = conn.getInputStream(); String state = getStringFromInputStream(is); return state; } else { Log.i(TAG, "訪問失敗: " + responseCode); } } catch (Exception e) { e.printStackTrace(); } finally { if(conn != null) { conn.disconnect(); } } return null; }
根據流返回一個字串資訊;
/** * 根據流返回一個字串資訊 * @param is * @return * @throws IOException */ private static String getStringFromInputStream(InputStream is) throws IOException { ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int len = -1; while((len = is.read(buffer)) != -1) { baos.write(buffer, 0, len); } is.close(); String html = baos.toString(); // 把流中的資料轉換成字串, 採用的編碼是: utf-8 // String html = new String(baos.toByteArray(), "GBK"); baos.close(); return html; }