URL的openConnection()方法將返回一個URLConnection對象,該對象表示應用程序和URL之間的通信連接。程序可以通過URLConnection實例向該URL發送請求,讀取URL引用的資源。
通常創建一個和URL的連接,並發送請求、讀取此URL引用的資源需要如下幾個步驟。
1、通過調用URL對象openConnection()方法來創建URLConnection對象。
2、設置URLConnection的參數和普通請求屬性。
3、如果只是發送GET方式請求,使用connect方法建立和遠程資源之間的實際連接即可;如果需要發送POST方式的請求,需要獲取URLConnection實例對應的輸出流來發送請求參數。
4、遠程資源變為可用,程序可以訪問遠程資源的頭字段,或通過輸入流讀取遠程資源的數據。
如果既要使用輸入流讀取URLConnection響應的內容,也要使用輸出流發送請求參數,一定要先使用輸出流,再使用輸入流。
示例程序展示了如何向WEB站點發送GET請求、POST請求,並從Web站點取得響應,該程序中用到一個發送GET、POST請求的工具類,該工具類的代碼如下。
package org.helloword;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.List;
import java.util.Map;
public class GetPostUtil {
public static String sendGet(String url,String params)
{
String result="";
BufferedReader in=null;
try {
String urlName=url+"?"+params;
URL realUrl;
realUrl = new URL(urlName);
URLConnection conn=realUrl.openConnection();
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("user-agent", "Mozilla/4.0(compatible;MSIE)");
conn.connect();
Map<String,List<String>> map=conn.getHeaderFields();
for(String key:map.keySet())
{
System.out.println(key+"--->"+map.get(key));
}
in=new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line;
while((line=in.readLine())!=null)
{
result+="\n"+line;
}
}
catch (Exception e) {
// TODO Auto-generated catch block
System.out.println("發送GET請求出現異常!"+e);
e.printStackTrace();
}
finally
{
if(in!=null)
{
try {
in.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return result;
}
public static String sendPost(String url,String params)
{
PrintWriter out=null;
BufferedReader br=null;
String result="";
try {
URL realURL=new URL(url);
URLConnection conn=realURL.openConnection();
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("user-agent", "Mozilla/4.0(compatible;MSIE)");
conn.setDoOutput(true);
conn.setDoInput(true);
//獲取URLConnection對象對應的輸入流
out=new PrintWriter(conn.getOutputStream());
//發送請求參數
out.print(params);
out.flush();
br=new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line;
while((line=br.readLine())!=null)
{
result+="\n"+line;
}
} catch (Exception e) {
// TODO Auto-generated catch block
System.out.println("程序出現異常"+e);
e.printStackTrace();
}
finally{
try {
if(br!=null)
{
br.close();
}
if(out!=null)
{
out.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return result;
}
}
