一、POST與GET的區別:1、GET是從伺服器上擷取資料,POST是向伺服器傳送資料。2、在用戶端, GET方式在通過URL提交資料,資料在URL中可以看到;POST方式,資料放置在HTML HEADER內提交。3、對於GET方式,伺服器端用Request.QueryString擷取變數的值,對於POST方式,伺服器端用Request.Form擷取提交的數。4、GET方式提交的資料最多隻能有1024位元組,而POST則沒有此限制。5、安全性問題。正如在(2)中提到,使用 GET 的時候,參數會顯示在地址欄上,而 POST 不會。所以,如果這些資料是中文資料而且是非敏感性資料,那麼使用 GET ;如果使用者輸入的資料不是中文字元而且包含敏感性資料,那麼還是使用 POST為好。二、Java中的Http編程主要有兩種
1、標準的Java介面
2、標準的Apache介面
三、標準的Java介面編程1、GET方式
import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.HttpURLConnection;import java.net.URL;import java.util.HashMap;import java.util.Map;public class http_get1 {// public static final String path =// "http://192.168.137.103:8080/MyHttp/servlet/LoginAction";public static final String path = "http://localhost:8080/MyHttp/servlet/LoginAction";public static String getStringFromStream(InputStream is) {String str = "";ByteArrayOutputStream bos = new ByteArrayOutputStream();int len = 0;byte[] data = new byte[1024];if(is!=null){try {while ((len = is.read(data)) != -1) {bos.write(data, 0, len);}str = new String(bos.toByteArray(), "utf-8");} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}return str;}public static InputStream useGetMethod(Map map,String encode) {InputStream is = null;StringBuffer sb = new StringBuffer(path);sb.append("?");if (map != null && !map.isEmpty()) {for (Map.Entry entry : map.entrySet()) {sb.append(entry.getKey()).append("=").append(entry.getValue()).append("&");}sb.deleteCharAt(sb.length() - 1);System.out.println(sb.toString());URL url = null;OutputStream os = null;try {url = new URL(sb.toString());if (url != null) {HttpURLConnection con = (HttpURLConnection) url.openConnection();con.setRequestMethod("GET");con.setConnectTimeout(3000);con.setDoInput(true);con.setDoOutput(true);os = con.getOutputStream();os.write(sb.toString().getBytes(encode));os.close();if (con.getResponseCode() == 200) {is = con.getInputStream();}}} catch (Exception e) {}}return is;}public static void main(String[] args) {// TODO Auto-generated method stubMap map = new HashMap();map.put("username", "admin");map.put("password", "1243");String str = getStringFromStream(useGetMethod(map, "utf-8"));System.out.println(str);}}
2、POST方式
import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;import java.util.HashMap;import java.util.Map;public class http_post1 {// 使用POST請求與GET請求的區別就是POST請求不需要封裝請求路徑,只需要封裝請求參數public static InputStream usePostMethod(Map map,String encode) {StringBuffer buffer = new StringBuffer();InputStream is = null;OutputStream os = null;if (map != null && !map.isEmpty()) {for (Map.Entry entry : map.entrySet()) {try {buffer.append(entry.getKey()).append("=").append(entry.getValue())// .append(URLEncoder.encode(entry.getValue(),// encode)).append("&");} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}buffer.deleteCharAt(buffer.length() - 1);System.out.println(buffer.toString());}try {URL url = new URL(http_get1.path);if (url != null) {HttpURLConnection con = (HttpURLConnection) url.openConnection();con.setDoInput(true);con.setDoOutput(true);con.setRequestMethod("POST");con.setConnectTimeout(3000);byte[] tdata = buffer.toString().getBytes();// con.setRequestProperty("Content-Type",// "application/x-www-form-urlencoded");// con.setRequestProperty("Content-Length",// String.valueOf(tdata.length));os = con.getOutputStream();os.write(tdata);os.close();if (con.getResponseCode() == 200) {is = con.getInputStream();}}} catch (MalformedURLException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}return is;}public static void main(String[] args) {Map map = new HashMap();map.put("username", "admin");map.put("password", "123");System.out.println(http_get1.getStringFromStream(usePostMethod(map,"utf-8")));}}
四、Apache介面
import java.io.InputStream;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import org.apache.http.HttpResponse;import org.apache.http.NameValuePair;import org.apache.http.client.entity.UrlEncodedFormEntity;import org.apache.http.client.methods.HttpPost;import org.apache.http.impl.client.DefaultHttpClient;import org.apache.http.message.BasicNameValuePair;public class http_myapache {public static InputStream useApacheMethod(Map map,String encode) {InputStream is = null;List list = new ArrayList();for (Map.Entry entry : map.entrySet()) {list.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));}try {// 封裝請求參數UrlEncodedFormEntity entity = new UrlEncodedFormEntity(list, encode);// 佈建要求參數HttpPost post = new HttpPost(http_get1.path);post.setEntity(entity);// 執行請求DefaultHttpClient client = new DefaultHttpClient();HttpResponse response = client.execute(post);// 擷取狀態代碼if (response.getStatusLine().getStatusCode() == 200) {is = response.getEntity().getContent();}} catch (Exception e) {// TODO: handle exception}return is;}public static void main(String[] args) {Map map = new HashMap();map.put("username", "admin");map.put("password", "123");System.out.println(http_get1.getStringFromStream(useApacheMethod(map,"utf-8")));}}
總結:對於普通的Http編程可以選擇GET方式或者POST方式,但對於更高要求的HTTP編程,Apache提供 的標準介面則更為靈活。
附Apache編程的JAR包和XMLPull解析時用到的JAR包:
Apache編程時用到的JAR包: 點擊開啟連結
XMLPull解析時用到的JAR包: 點擊開啟連結