【通訊】URLConnection 詳細

通訊連接。程序能夠經過URLConnection實例向該URL發送請求、讀取URL引用的資源。併發

一般建立一個和 URL的鏈接,併發送請求、讀取此URL引用的資源須要以下幾個步驟:jsp

經過調用URL對象openConnection()方法來建立URLConnection對象。測試

設置URLConnection的參數和普通請求屬性。url

若是隻是發送GET方式請求,使用connect方法創建和遠程資源之間的實際鏈接便可;若是須要發送POST方式的請求,須要獲取URLConnection實例對應的輸出流來發送請求參數。spa

遠程資源變爲可用,程序能夠訪問遠程資源的頭字段或經過輸入流讀取遠程資源的數據。code

在創建和遠程資源的實際鏈接以前,程序能夠經過以下方法來設置請求頭字段:對象

setAllowUserInteraction:設置該URLConnection的allowUserInteraction請求頭字段的值。
setDoInput:設置該URLConnection的doInput請求頭字段的值。
setDoOutput:設置該URLConnection的doOutput請求頭字段的值。
setIfModifiedSince:設置該URLConnection的ifModifiedSince請求頭字段的值。
setUseCaches:設置該URLConnection的useCaches請求頭字段的值。
blog

除此以外,還可使用以下方法來設置或增長通用頭字段:資源

setRequestProperty(String key, String value):設置該URLConnection的key請求頭字段的值爲value。以下代碼所示:字符串

public static String sendGet(String url , String param) 
{
String result = "";
BufferedReader in = null;
try
{
String urlName = url + "?" + param;
URL realUrl = new URL(urlName);
//打開和URL之間的鏈接
URLConnection conn = realUrl.openConnection();
//設置通用的請求屬性
conn.setRequestProperty("accept", "* 
public static String sendPost(String url,String param)
{
PrintWriter out = null;
BufferedReader in = null;
String result = "";
try
{
URL realUrl = new URL(url);
//打開和URL之間的鏈接
URLConnection conn = realUrl.openConnection();
//設置通用的請求屬性
conn.setRequestProperty("accept", "*/*"); 
conn.setRequestProperty("connection", "Keep-Alive"); 
conn.setRequestProperty("user-agent", 
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"); 
//發送POST請求必須設置以下兩行
conn.setDoOutput(true);
conn.setDoInput(true);
//獲取URLConnection對象對應的輸出流
out = new PrintWriter(conn.getOutputStream());
//發送請求參數
out.print(param);
//flush輸出流的緩衝
out.flush();
//定義BufferedReader輸入流來讀取URL的響應
in = new BufferedReader(
new InputStreamReader(conn.getInputStream()));
String line;
while ((line = in.readLine())!= null)
{
result += "\n" + line;
}
}
catch(Exception e)
{
System.out.println("發送POST請求出現異常!" + e);
e.printStackTrace();
}
//使用finally塊來關閉輸出流、輸入流
finally
{
try
{
if (out != null)
{
out.close();
}
if (in != null)
{
in.close();
}
}
catch (IOException ex)
{
ex.printStackTrace();
}
}
return result;
}
//提供主方法,測試發送GET請求和POST請求
public static void main(String args[])
{
//發送GET請求
String s = TestGetPost.sendGet("http://localhost:8888/abc/
login.jsp",null);
System.out.println(s);
//發送POST請求
String s1 = TestGetPost.sendPost("http://localhost:8888/abc/a.jsp",
"user=李剛&pass=abc");
System.out.println(s1);
}
}

上面程序中發送GET請求時只需將請求參數放在URL字符串以後,以?隔開,程序直接調用URLConnection對象的connect方法便可,如程序中sendGet方法中粗體字代碼所示;若是程序須要發送POST請求,則須要先設置doIn和doOut兩個請求頭字段的值,再使用URLConnection對應的輸出流來發送請求參數便可,如程序中sendPost()方法中粗體字代碼所示。無論是發送GET請求,仍是發送POST請求,程序獲取URLConnection響應的方式徹底同樣:若是程序能夠肯定遠程響應是字符流,則可使用字符流來讀取;若是程序沒法肯定遠程響應是字符流,則使用字節流讀取便可。 

相關文章
相關標籤/搜索