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