通常創建一個URL的連接併發送請求、讀取此URL引用的資源的步驟如下:
1、調用URL的openConnection()方法來創建URLConnection對象
2、設置URLConnection的參數和普通請求屬性
3、如果只是發送GET方式請求,使用connect方法建立和遠程資源之間的實際連接就行;如果需要發送POST方式的請求,需要獲取URLConnection實例對應的輸出流來發送請求參數
4、遠程資源變得可用,程序可以訪問遠程資源的頭字段或通過輸入流來讀取遠程資源的數據
程序實例:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.URL;
import java.net.URLConnection;
import java.util.List;
import java.util.Map;
public class GetPostTest {
/**
* 向指定url發送get請求
* @param url 發送請求的url
* @param param 請求參數
*/
public static String sendGet(String url,String param){
String result = "";
BufferedReader in = null;
try{
String urlName = url + "?" + param;
URL readUrl = new URL(urlName);
//打開url連接
URLConnection conn = readUrl.openConnection();
//設置請求屬性
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)");
conn.connect();
Map<String, List<String>> map = conn.getHeaderFields();
//遍歷所有響應頭字段
for(String key : map.keySet()){
System.out.println(key + "-------->" + map.get(key));
}
//定義輸入流來讀取url的響應
in = new BufferedReader(
new InputStreamReader(conn.getInputStream())
);
String line;
while((line = in.readLine()) != null){
result += "\n" + line;
}
}catch(Exception e){
System.out.println("發送get請求出現異常" + e);
e.printStackTrace();
}finally{
try{
if(in != null){
in.close(); //關閉輸入流
}
}catch(IOException ex){
ex.printStackTrace();
}
}
return result;
}
/**
* 向指定url發送post請求
* @param url 發送請求的url
* @param param 請求參數
*/
public static String sendPost(String url,String param){
PrintWriter out = null;
String result = "";
BufferedReader in = null;
try{
URL readUrl = new URL(url);
//打開url連接
URLConnection conn = readUrl.openConnection();
//設置請求屬性
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)");
conn.setDoOutput(true);
conn.setDoInput(true);
out = new PrintWriter(conn.getOutputStream());
//發送請求參數
out.print(param);
//輸出流的緩衝
out.flush();
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 {
try{
if(out != null){
out.close();
}
if(in != null){
in.close();
}
}catch(IOException ex){
ex.printStackTrace();
}
}
return result;
}
public static void main(String[] args) {
//發送get請求
String s = GetPostTest.sendGet("http://www.csdn.net/?ref=toolbar", null);
System.out.println(s);
//發送post請求
String s1 = GetPostTest.sendPost("http://blog.csdn.net/william_hangshao/article/details/65636141", null);
System.out.println(s1);
}
}