歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android學習之Http使用Post方式進行數據提交

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

日期:2017/3/1 10:00:43   编辑:Linux編程

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