public abstract class java.net.URLConnection extends Object
抽象类 URLConnection 是所有类的超类,它代表应用程序和 URL 之间的通信链接。此类的实例可用于读取和写入此 URL 引用的资源。通常,创建一个到 URL 的连接需要几个步骤:
- 通过在 URL 上调用 openConnection 方法创建连接对象。
- 处理设置参数和一般请求属性。
- 使用 connect 方法建立到远程对象的实际连接。
- 远程对象变为可用,远程对象的头字段和内容变为可访问。
使用以下方法修改设置参数:
- setAllowUserInteraction(boolean allowuserinteraction):可以通过setDefaultAllowUserInteraction 方法设置默认值
- setDoInput(boolean doinput):true:从URL连接读取数据,默认值true
- setDoOutput(boolean dooutput):true:将数据写入URL连接,默认值false,POST请求时需设置为true
- setIfModifiedSince(long ifmodifiedsince)
- setUseCaches(boolean usecaches):是否使用缓存,可以通过setDefaultUseCaches 方法设置默认值
使用以下方法修改一般请求属性:
- setRequestProperty(String key, String value)
上面每个 set 方法都有一个用于获取参数值或一般请求属性值的对应 get 方法。适用的具体参数和一般请求属性取决于协议。
在建立到远程对象的连接后,以下方法用于访问头字段和内容:
- getContent
- getHeaderField
- getInputStream
- getOutputStream
某些头字段需要经常访问。以下方法提供对这些字段的访问:
- getContentEncoding
- getContentLength
- getContentType
- getDate
- getExpiration
- getLastModifed
1.模拟发送GET请求
/**
* GET请求
* @param url url
* @param params 查询参数
* @return
*/
public String doGet(String url, String params) {
try {
String urlString = url + "?" + params;
URL realUrl = new URL(urlString);
URLConnection conn = realUrl.openConnection();
// 设置请求参数
conn.setUseCaches(false);
conn.setConnectTimeout(5000);
// 设置请求属性
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
// 使用 connect 方法建立到远程对象的实际连接。
conn.connect();
// 远程对象可用
// 获取响应头
Map<String, List<String>> fieldMap = conn.getHeaderFields();
System.out.println(fieldMap);
// 获取相应正文
String line = null;
BufferedReader bufr = new BufferedReader(new InputStreamReader(conn.getInputStream()));
StringBuffer sb = new StringBuffer();
while ((line = bufr.readLine()) != null) {
sb.append(line);
}
bufr.close();
return sb.toString();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
2.模拟发送POST请求
/**
* POST请求
* @param url url
* @param params 参数
* @return
*/
public String doPost(String url, String params) {
try {
URL realUrl = new URL(url);
URLConnection conn = realUrl.openConnection();
// 设置请求参数
conn.setDoInput(true);// true:从URL连接读取数据,默认值true,可以不设置
conn.setDoOutput(true);// true:将数据写入URL连接,默认值false
conn.setUseCaches(false);
conn.setConnectTimeout(5000);
// 设置请求属性
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
// 设置请求体
OutputStream out = conn.getOutputStream();
out.write(params.getBytes());
out.flush();
out.close();
// 使用 connect 方法建立到远程对象的实际连接。
conn.connect();
// 远程对象可用
// 获取响应头
Map<String, List<String>> fieldMap = conn.getHeaderFields();
System.out.println(fieldMap);
// 获取相应正文
String line = null;
BufferedReader bufr = new BufferedReader(new InputStreamReader(conn.getInputStream()));
StringBuffer sb = new StringBuffer();
while ((line = bufr.readLine()) != null) {
sb.append(line);
}
bufr.close();
return sb.toString();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
本文参考:JDK1.6中文文档, http://blog.csdn.net/laiyaxing/article/details/51585755