通過java.net.URLConnection發送HTTP請求的方法

來源:互聯網
上載者:User

標籤:

1、GET與POST請求的區別

  a) get請求可以擷取靜態頁面,也可以把參數放在URL字串後面,傳遞給servlet, 

  b) post與get的不同之處在於post的參數不是放在URL字串裡面,而是放在http請求的本文內。 

2、URLConnection的對象

  a) 擷取URLConnection執行個體

URL url = new URL(urlString);// 根據url產生urlConnection對象urlConnection = (HttpURLConnection) url.openConnection();

  b) 常見參數設定

// 設定是否向httpUrlConnection輸出,因為這個是post請求,參數要放在 // http本文內,因此需要設為true, 預設情況下是false; httpUrlConnection.setDoOutput(true); // 設定是否從httpUrlConnection讀入,預設情況下是true; httpUrlConnection.setDoInput(true); // Post 請求不能使用緩衝 httpUrlConnection.setUseCaches(false); // 設定傳送的內容類型是可序列化的java對象 // (如果不設此項,在傳送序列化對象時,當WEB服務預設的不是這種類型時可能拋java.io.EOFException) httpUrlConnection.setRequestProperty("Content-type", "application/x-java-serialized-object"); // 設定請求的方法為"POST",預設是GET httpUrlConnection.setRequestMethod("POST");//設定逾時(timeout),在網路異常的情況下,可能會導致程式僵死而不繼續往下執行。System.setProperty("sun.net.client.defaultConnectTimeout", 逾時毫秒數字串);System.setProperty("sun.net.client.defaultReadTimeout", 逾時毫秒數字串);

  c) HttpURLConnection寫資料與發送資料問題

// 現在通過輸出資料流對象構建對象輸出資料流對象,以實現輸出可序列化的對象。 OutputStream outStrm = httpUrlConnection.getOutputStream(); ObjectOutputStream objOutputStrm = new ObjectOutputStream(outStrm); // 向對象輸出資料流寫出資料,這些資料將存到記憶體緩衝區中 objOutputStrm.writeObject(new String("我是測試資料")); // 重新整理對象輸出資料流,將任何位元組都寫入潛在的流中(些處為ObjectOutputStream) objOutputStm.flush(); // 關閉流對象。此時,不能再向對象輸出資料流寫入任何資料,先前寫入的資料存在於記憶體緩衝區中, // 在調用下邊的getInputStream()函數時才把準備好的http請求正式發送到伺服器 objOutputStm.close(); // 調用HttpURLConnection連線物件的getInputStream()函數, // 將記憶體緩衝區中封裝好的完整的HTTP請求電文發送到服務端。 InputStream inStrm = httpConn.getInputStream(); // <===注意,實際發送請求的程式碼片段就在這裡 // 上邊的httpConn.getInputStream()方法已調用,本次HTTP請求已結束,下邊向對象輸出資料流的輸出已無意義// 既使對象輸出資料流沒有調用close()方法,下邊的操作也不會向對象輸出資料流寫入任何資料. // 因此,要重新發送資料時需要重新建立串連、重新設參數、重新建立流對象、重新寫資料、 // 重新發送資料(至於是否不用重新這些操作需要再研究) objOutputStm.writeObject(new String("")); httpConn.getInputStream();

3、代碼執行個體

package org.zhangsm.httpRequest;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.URL;import java.util.Map;/** * 使用Java原生的API發送Http請求,即java.net.URL、java.net.URLConnection。 * 步驟如下: * 1、通過統一資源定位器擷取連接器 * 2、佈建要求的參數 * 3、以輸入資料流的形式擷取返回內容 * 4、關閉輸入資料流 * @author zhang.shuming * */public class HttpRequest {    public static void main(String[] args) throws Exception {        System.out.println(send("http://www.baidu.com", "GET", null, null));    }    private static String send(String urlString,String method,    Map<String,String> parameters,Map<String,String> propertys) throws Exception{            HttpURLConnection urlConnection = null;    if(method.equalsIgnoreCase("GET") && parameters != null){StringBuffer param = new StringBuffer();int i = 0;for(String key : parameters.keySet()){if(i == 0) param.append("?");else param.append("&");param.append(key).append("=").append(parameters.get(key));i++;    }    urlString += param;}URL url = new URL(urlString);// 根據url產生urlConnection對象urlConnection = (HttpURLConnection) url.openConnection();// 設定參數urlConnection.setRequestMethod(method);urlConnection.setDoOutput(true);urlConnection.setDoInput(true);urlConnection.setUseCaches(false);if(propertys != null){for(String key : propertys.keySet()){urlConnection.addRequestProperty(key, propertys.get(key));}}if(method.equalsIgnoreCase("POST") && parameters != null){StringBuffer param = new StringBuffer();for(String key : parameters.keySet()){param.append("&");param.append(key).append("=").append(parameters.get(key));}urlConnection.getOutputStream().write(param.toString().getBytes());urlConnection.getOutputStream().flush();urlConnection.getOutputStream().close();}return makeContent(urlString,urlConnection);}private static String makeContent(String urlString,HttpURLConnection urlConnection)     throws IOException{InputStream in = urlConnection.getInputStream();BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(in));StringBuffer temp = new StringBuffer();String line;while((line = bufferedReader.readLine()) != null){temp.append(line);}bufferedReader.close();return temp.toString();}}




通過java.net.URLConnection發送HTTP請求的方法

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.