您当前的位置: 首页 > 

梁云亮

暂无认证

  • 1浏览

    0关注

    1211博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

使用URLConnection提交请求

梁云亮 发布时间:2019-10-21 23:22:29 ,浏览量:1

使用URLConnection提交请求
URL的openConnection()方法会返回一个URLConnection对象,该对象表示URL和应用程序之间的通信连接。应用程序可以通过URLConnection实例向该URL发送请求,读取URL所引用的资源。
通过创建一个和URL的连接、并发送请求、读取此URL引用的资源需要如下几个步骤:
  • 通过调用URL对象的openConnection()方法创建一个URLConnection对象;
  • 设置URLConnection对象的参数和普通请求属性
  • 如果只是发送GET方式请求,使用connect()方法建立和远程资源之间的实际连接即可;如果需要发送POST方式的请求,需要获取URLConnection实例对应的输出流来发送请求参数
  • 远程资源变为可用,程序可以访问远程资源的头字段,或通过输入流读取远程资源的数据
示例: 使用GET请求获得网页源代码,使用POST请求实现用户登录功能

第一步:定义布局文件,上方是两个按钮,下方是一个TextView,显示效果如下 在这里插入图片描述 软件界面布局效果图 第二步:编写用户单击【发送GET请求】按钮的事件处理方法,代码如下

public String sendGet(String url, String params) {
	// 向指定URL发送GET方法的请求,返回URL所代表远程资源的响应
	// params请求参数的形式应是:name1=value1&name2=value2
	String result = "";
	BufferedReader in = null;
	try {
		String urlName = url + "?" + params;
		URL realUrl = new URL(urlName);
		URLConnection conn = realUrl.openConnection();// 打开和URL之间的连接
		// 设置通用的请求属性
		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 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.getMessage());
	} finally {// 使用finally块来关闭输入流
		try {
			if (in != null) {
				in.close();
			}
		} catch (IOException ex) {
			ex.printStackTrace();
		}
	}
	return result;
}

第三步:编写用户单击【发送POST请求】按钮的事件处理方法,代码如下

public String sendPost(String url, String params) {
	// 向指定URL发送POST方法的请求,返回URL所代表远程资源的响应
	// params请求参数的形式应是:name1=value1&name2=value2
	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(params);// 发送请求参数
		out.flush();// 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;
}

第四步:在Activity类的onCreate()方法中添加如下代码:

get = (Button) findViewById(R.id.get);
post = (Button) findViewById(R.id.post);
show = (TextView) findViewById(R.id.show);
get.setOnClickListener(new OnClickListener() {
	public void onClick(View v) {
		String response = sendGet(
				"http://www.baidu.com/", null);
		show.setText(response);
	}
});
post.setOnClickListener(new OnClickListener() {
	public void onClick(View v) {
		String response = sendPost(
				"http://www.zzzy.org/login.jsp",
				"name=hc&pass=hc");
		show.setText(response);
	}
});

第五步:程序运行效果: 在这里插入图片描述 GET请求结果图 在这里插入图片描述 POST请求结果图

关注
打赏
1665409997
查看更多评论
立即登录/注册

微信扫码登录

0.0426s