HttpURLConnection模擬請求小例子
HttpURLConnection用法詳解
一、簡介
HttpURLConnection類是另一種訪問HTTP資源的方式。
二、連線步驟
1、通過openConnection方法建立連線物件。
2、設定請求頭和請求體
3、使用connect方法於遠端物件進行連線
4、遠端物件變得可用,其欄位和內容變得可訪問
三、用法
1、建立連線
// 獲取連線的URL
URLurl= newURL("http://localhost:8080/day10-http/ServletDemo1");
// 開啟連線
HttpURLConnectionhttp= (HttpURLConnection) url
2、設定請求引數
//提交模式,預設是“GET”
conn.setRequestMethod("POST"); //提交模式
//設定是否向httpUrlConnection輸出,因為這個是post請求,引數要放在
//http正文內,因此需要設為true,預設情況下是false;
conn.setDoOutput(true);
//設定是否從httpUrlConnection讀入,預設情況下是true;
conn.setDoInput(true);
//Post 請求不能使用快取
conn.setUseCaches(false);
//設定傳送的內容型別是可序列化的java物件
//(如果不設此項
//conn.setRequestProperty("Content-type","application/x-java-serialized-object");
conn.setRequestProperty("Content-Type","application/json;charset=UTF-8"); //設定請求屬性
conn.setRequestProperty("User-Agent","Autoyol_gpsCenter");
//連線,從上述中url.openConnection()
3、連線
conn.connect();
4、使用輸入輸出流傳遞引數
Stringstr= "{\"name\":\"小李\"}";
OutputStream os = conn.getOutputStream();
os.write(str.getBytes());
os.flush();
os.close();
//如果我將此段放在if裡面,那麼他會爆出不能將輸出放在輸入之後的問題,將其放在外面就OK了
if(conn.getResponseCode()==200){
InputStreamis= conn.getInputStream();
byte[]buffer= newbyte[1024];
ByteArrayOutputStreambaos= newByteArrayOutputStream();
for(intlen=0;(len= is.read(buffer))>0;){
baos.write(buffer,0, len);
}
StringreturnValue= newString(baos.toByteArray(),"utf-8");
System.out.println(returnValue);
baos.flush();
baos.close();
is.close();
}
servlet
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.getWriter().write("hello");
InputStream is = request.getInputStream();
byte[] buffer = new byte[1024];
ByteArrayOutputStream baos = new ByteArrayOutputStream();
for(int len =0;(len = is.read(buffer))>0;) {
baos.write(buffer, 0, len);
}
String returnValue = new String(baos.toByteArray(), "utf-8" );
System.out.println(returnValue);
baos.flush();
baos.close();
is.close();