在Java程序中,可以创建表示URL地址的URL对象。
URL对象表示一个绝对的URL地址,但URL对象可用绝对URL、相对URL和部分URL构建。
URL类中有各种用于获取属性的方法:
getProtocol
getHost
getPort
getFile
getRef
创建使用URL访问互联网上的资源
为获得URL的实际比特或内容信息,用它的openConnection()方法从它创建一个URLConnection对象,与调用URL对象相关,它返回一个URLConnection对象。它可能引发IOException异常。
URLConnection是访问远程资源属性的一般用途的类。如果你建立了与远程服务器之间的连接,你可以在传输它到本地之前用URLConnection来检查远程对象的属性。这些属性由HTTP协议规范定义并且仅对用HTTP协议的URL对象有意义。
URL和URLConnection类对于希望建立与HTTP服务器的连接来获取信息的简单程序来说是非常好的
URLConnection和HttpURLConnection使用的都是Java.net中的类,属于标准的java接口。
HttpURLConnection继承自URLConnection,差别在与HttpURLConnection仅仅针对Http连接。
基本步骤:
1) 创建 URL 以及 URLConnection / HttpURLConnection 对象
2) 设置连接参数
3) 连接到服务器
4) 向服务器写数据
其中conn的getInputStream与url.openStream是等效的,源码如下
1) 创建 URL 以及 URLConnection / HttpURLConnection 对象
2) 设置连接参数
3) 连接到服务器
4) 向服务器写数据
5)从服务器读取数据
代码如下:
public void urlConnection()
{
String urltext = "";
try {
// 方法一:
URL url = new URL(urltext);
URLConnection conn = url.openConnection();//取得一个新的链接对指定的URL
conn.connect();//本方法不会自动重连
InputStream is = conn.getInputStream();
is.close();//关闭InputStream
// 方法二:
URL url2 = new URL(urltext);
InputStream is2 = url2.openStream();
is2.close();//关闭InputStream
//URL对象也提供取得InputStream的方法。URL.openStream()会打开自动链接,所以不需要运行openConnection
//方法三:本方法同一,但是openConnection返回值直接转为HttpsURLConnection,
//这样可以使用一些Http连接特有的方法,如setRequestMethod
URL url3 = new URL(urltext);
HttpsURLConnection conn3 =(HttpsURLConnection)url.openConnection();
conn3.setRequestMethod("POST");
//允许Input、Output,不使用Cache
conn3.setDoInput(true);
conn3.setDoOutput(true);
conn3.setUseCaches(false);
/*
* setRequestProperty
*/
conn3.setRequestProperty("Connection", "Keep-Alive");
conn3.setRequestProperty("Charset", "UTF-8");
conn3.setRequestProperty("Content-type", "multipart/form-data;boundary=*****");
//在与服务器连接之前,设置一些网络参数
conn3.setConnectTimeout(10000);
conn3.connect();
// 与服务器交互:向服务器端写数据,这里可以上传文件等多个操作
OutputStream outStream = conn3.getOutputStream();
ObjectOutputStream objOutput = new ObjectOutputStream(outStream);
objOutput.writeObject(new String("this is a string…"));
objOutput.flush();
// 处理数据, 取得响应内容
InputStream is3 = conn.getInputStream();
is3.close();//关闭InputStream
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
其中conn的getInputStream与url.openStream是等效的,源码如下
public final InputStream openStream() throws java.io.IOException
{
return openConnection().getInputStream();
}
使用url链接发送get和post请求
下面是摘自网上的简单的使用url链接请求网络资源的方式
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", "*/*");
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方法的请求
*
* @param url
* 发送请求的URL
* @param param
* 请求参数,请求参数应该是name1=value1&name2=value2的形式。
* @return URL所代表远程资源的响应
*/
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;
}