利用HttpURLConnection發送請求


HttpURLConnection:

每個 HttpURLConnection實例都可用於生成單個請求,但是其他實例可以透明地共享連接到 HTTP 服務器的基礎網絡。請求后在 HttpURLConnection 的 InputStream 或 OutputStream 上調用 close() 方法可以釋放與此實例關聯的網絡資源,但對共享的持久連接沒有任何影響。如果在調用 disconnect() 時持久連接空閑,則可能關閉基礎套接字

HttpURLConnection的父類是URLConnection

今天寫此文章的目的是由於工作中遇到ajax請求獲取數據時碰到瀏覽器的跨域問題(由於javascript的同源策略導致的,同源就是兩個頁面有相同的協議、端口和主機),由於我們這邊屬於客戶端,無法修改服務端代碼,所以更改了請求方式,利用HttpURLConnection成功的解決跨域問題

1.生成HttpURLConnection對象

URL postUrl = new URL(url);
HttpURLConnection conn = (HttpURLConnection)postUrl.openConnection();

創建URL對象,通過openConnection方法創建URLConnection對象並強制轉化成HttpURLConnection對象

2.設置對應的方法參數,其中setRequestMethod為HttpURLConnection自有的方法

conn.setConnectTimeout(20000);
conn.setReadTimeout(30000);
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setUseCaches(true);
conn.setRequestProperty("Content-Type", "text/xml; charset=utf-8");
conn.setRequestMethod("GET");
conn.connect();

3.獲取請求數據

StringBuffer sb = new StringBuffer();
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream(),"UTF-8"));
String line = "";
try{
    while((line = reader.readLine()) !=null){
        sb.append(line);
    }
        
}catch(IOException e){
    e.printStackTrace();
}
try{
    reader.close();
}catch(Exception e){
    e.printStackTrace();
}
conn.disconnect();
return sb.toString();

此次沒有傳參,直接通過getInputStream打開鏈接讀取的輸入流,並通過BufferedReader高級流讀取數據,一行一行的append到StringBuffer中,成功獲取數據。

如果需要傳入對應的參數要用到PrintWriter的print方法

PrintWriter osw = new PrintWriter(conn.getOutputStream());
osw.print(param);
osw.flush();//刷新此流的緩沖
osw.close();

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM