日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

通过java.net.URLConnection发送HTTP请求的方法

發布時間:2024/4/14 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 通过java.net.URLConnection发送HTTP请求的方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

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();} }




轉載于:https://my.oschina.net/u/1425545/blog/493276

總結

以上是生活随笔為你收集整理的通过java.net.URLConnection发送HTTP请求的方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。