歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Android學習之Http使用Post方式進行數據提交

我們知道Android中通過Get方式提交的數據是作為Url地址的一部分進行提交,而且對字節數的長度也有限制,與Get方式類似,http-post參數也是被URL編碼的,然而它的變量名和變量值不作為URL的一部分被傳送,而是放在實際的HTTP請求消息內部被傳送。

可以通過如下的代碼設置POST提交方式參數:

  1. HttpURLConnection urlConnection = (HttpURLConnection)url.openConnection(); 
  2. urlConnection.setConnectTimeout(3000); 
  3. urlConnection.setRequestMethod("POST"); //以post請求方式提交 
  4. urlConnection.setDoInput(true);     //讀取數據 
  5. urlConnection.setDoOutput(true);    //向服務器寫數據 
  6. //獲取上傳信息的大小和長度 
  7. byte[] myData = stringBuilder.toString().getBytes(); 
  8. //設置請求體的類型是文本類型,表示當前提交的是文本數據 
  9. urlConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 
  10. urlConnection.setRequestProperty("Content-Length", String.valueOf(myData.length)); 

這裡使用一個案例來看一下如何使用post方式提交數據到服務器:

首先我們創建一個java project,只要創建一個類就行,我們創建一個HttpUtils.java類,

【代碼如下】:

  1. package com.wujay.utils; 
  2.  
  3. import java.io.ByteArrayOutputStream; 
  4. import java.io.IOException; 
  5. import java.io.InputStream; 
  6. import java.io.OutputStream; 
  7. import java.io.UnsupportedEncodingException; 
  8. import java.net.HttpURLConnection; 
  9. import java.net.MalformedURLException; 
  10. import java.net.URL; 
  11. import java.net.URLEncoder; 
  12. import java.util.HashMap; 
  13. import java.util.Map; 
  14.  
  15. public class HttpUtils { 
  16.     private static String PATH = "http://bdfngdg:8080/myhttp/servlet/LoginAction"; // 服務端地址 
  17.     private static URL url; 
  18.  
  19.     public HttpUtils() { 
  20.         super(); 
  21.     } 
  22.  
  23.     // 靜態代碼塊實例化url 
  24.     static { 
  25.         try { 
  26.             url = new URL(PATH); 
  27.         } catch (MalformedURLException e) { 
  28.             e.printStackTrace(); 
  29.         } 
  30.     } 
  31.  
  32.     /** 
  33.      * 發送消息體到服務端 
  34.      *   
  35.      * @param params 
  36.      * @param encode 
  37.      * @return 
  38.      */ 
  39.     public static String sendPostMessage(Map<String, String> params, 
  40.             String encode) { 
  41.         StringBuilder stringBuilder = new StringBuilder(); 
  42.         if (params != null && !params.isEmpty()) { 
  43.             for (Map.Entry<String, String> entry : params.entrySet()) { 
  44.                 try { 
  45.                     stringBuilder 
  46.                             .append(entry.getKey()) 
  47.                             .append("=") 
  48.                             .append(URLEncoder.encode(entry.getValue(), encode)) 
  49.                             .append("&"); 
  50.                 } catch (UnsupportedEncodingException e) { 
  51.                     e.printStackTrace(); 
  52.                 } 
  53.             } 
  54.             stringBuilder.deleteCharAt(stringBuilder.length() - 1); 
  55.             try { 
  56.                 HttpURLConnection urlConnection = (HttpURLConnection) url 
  57.                         .openConnection(); 
  58.                 urlConnection.setConnectTimeout(3000); 
  59.                 urlConnection.setRequestMethod("POST"); // 以post請求方式提交 
  60.                 urlConnection.setDoInput(true); // 讀取數據 
  61.                 urlConnection.setDoOutput(true); // 向服務器寫數據 
  62.                 // 獲取上傳信息的大小和長度 
  63.                 byte[] myData = stringBuilder.toString().getBytes(); 
  64.                 // 設置請求體的類型是文本類型,表示當前提交的是文本數據 
  65.                 urlConnection.setRequestProperty("Content-Type", 
  66.                         "application/x-www-form-urlencoded"); 
  67.                 urlConnection.setRequestProperty("Content-Length", 
  68.                         String.valueOf(myData.length)); 
  69.                 // 獲得輸出流,向服務器輸出內容 
  70.                 OutputStream outputStream = urlConnection.getOutputStream(); 
  71.                 // 寫入數據 
  72.                 outputStream.write(myData, 0, myData.length); 
  73.                 outputStream.close(); 
  74.                 // 獲得服務器響應結果和狀態碼 
  75.                 int responseCode = urlConnection.getResponseCode(); 
  76.                 if (responseCode == 200) { 
  77.                     // 取回響應的結果 
  78.                     return changeInputStream(urlConnection.getInputStream(), 
  79.                             encode); 
  80.                 } 
  81.             } catch (IOException e) { 
  82.                 e.printStackTrace(); 
  83.             } 
  84.  
  85.         } 
  86.         return ""; 
  87.     } 
  88.  
  89.     /** 
  90.      * 將一個輸入流轉換成指定編碼的字符串 
  91.      *   
  92.      * @param inputStream 
  93.      * @param encode 
  94.      * @return 
  95.      */ 
  96.     private static String changeInputStream(InputStream inputStream, 
  97.             String encode) { 
  98.  
  99.         // 內存流 
  100.         ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); 
  101.         byte[] data = new byte[1024]; 
  102.         int len = 0; 
  103.         String result = null; 
  104.         if (inputStream != null) { 
  105.             try { 
  106.                 while ((len = inputStream.read(data)) != -1) { 
  107.                     byteArrayOutputStream.write(data, 0, len); 
  108.                 } 
  109.                 result = new String(byteArrayOutputStream.toByteArray(), encode); 
  110.             } catch (IOException e) { 
  111.                 e.printStackTrace(); 
  112.             } 
  113.         } 
  114.         return result; 
  115.     } 
  116.  
  117.     /** 
  118.      * @param args 
  119.      */ 
  120.     public static void main(String[] args) { 
  121.         Map<String, String> map = new HashMap<String, String>(); 
  122.         map.put("username", "admin"); 
  123.         map.put("password", "123456"); 
  124.         String result = sendPostMessage(map, "UTF-8"); 
  125.         System.out.println(">>>" + result); 
  126.     } 
  127.  
Copyright © Linux教程網 All Rights Reserved