URLConnection使用示例

public abstract class java.net.URLConnection extends Object

抽象类 URLConnection 是所有类的超类,它代表应用程序和 URL 之间的通信链接。此类的实例可用于读取和写入此 URL 引用的资源。通常,创建一个到 URL 的连接需要几个步骤:


  1. 通过在 URL 上调用 openConnection 方法创建连接对象。
  2. 处理设置参数和一般请求属性。
  3. 使用 connect 方法建立到远程对象的实际连接。
  4. 远程对象变为可用,远程对象的头字段和内容变为可访问。
使用以下方法修改设置参数:
  • 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



猜你喜欢

转载自blog.csdn.net/mytt_10566/article/details/78626286