1. 程式人生 > >HttpURLConnection模擬請求小例子

HttpURLConnection模擬請求小例子

HttpURLConnection用法詳解

一、簡介

HttpURLConnection類是另一種訪問HTTP資源的方式。

二、連線步驟

1、通過openConnection方法建立連線物件。

2、設定請求頭和請求體

3、使用connect方法於遠端物件進行連線

4、遠端物件變得可用,其欄位和內容變得可訪問

三、用法

1、建立連線

// 獲取連線的URL

URLurl= newURL("http://localhost:8080/day10-http/ServletDemo1");

// 開啟連線

HttpURLConnectionhttp= (HttpURLConnection) url

.openConnection();

2、設定請求引數

//提交模式,預設是“GET”

conn.setRequestMethod("POST"); //提交模式

//設定是否向httpUrlConnection輸出,因為這個是post請求,引數要放在

//http正文內,因此需要設為true,預設情況下是false;

conn.setDoOutput(true);

//設定是否從httpUrlConnection讀入,預設情況下是true;

conn.setDoInput(true);

//Post 請求不能使用快取

conn.setUseCaches(false);

//設定傳送的內容型別是可序列化的java物件

//(如果不設此項

,在傳送序列化物件時,WEB服務預設的不是這種型別時可能拋java.io.EOFException)

//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()

至此的配置必須要在connect之前完成,

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