在日常项目应用中,经常需要向Web站点发送Get请求、Post请求,并从Web站点获取响应。例如我们可以通过以下代码来实现:
public
class
TestGetPost {
/**
* 向指定的URL发送Get方法的请求
*/
public
static
String sendGet(String url,String param){
String result =
""
;
BufferedReader in =
null
;
String urlName = url +
"?"
+param;
try
{
URL realUrl =
new
URL(urlName);
//打开和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)"
);
//建立实际的连接
conn.connect();
//获取所有的响应头字段
Map<String,List<String>> map = conn.getHeaderFields();
//遍历所有的响应头字段
for
(String key:map.keySet()){
System.
out
.println(key+
"--->"
+map.get(key));
}
//定义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(
"发送GET请求出现异常"
+ e);
e.printStackTrace();
}
//使用finally块来关闭输入流
finally
{
try
{
if
(in!=
null
){
in.close();
}
}
catch
(IOException ex){
ex.printStackTrace();
}
}
return
result;
}
/*
* 向指定URL发送Post方法的请求
*/
public
static
String sentPost(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.setDoInput(
true
);
conn.setDoOutput(
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;
}
public
static
void
main(String []args){
//发送Get请求
String s = TestGetPost.sendGet(
"http://localhost:8080/aa/1.html"
,
null
);
System.
out
.println(s);
//发送Post请求
String s1 = TestGetPost.sentPost(
"http://localhost:8080/aa/1.html"
,
"user=李刚&pass=abc"
);
System.
out
.println(s1);
}
}
在上述代码中,在发送Get请求时只需要将请求参数放在URL字符串之后用“?”隔开,程序直接调用URLConnection对象的Connect方法即可。如果程序需要发送Post请求,则需要先设置doIn和doOut两个请求头字段值,然后再使用URLConnection对应的输出流来发送请求参数即可。