android httpurlconnection
HttpURLConnection是java的标准类,HttpURLConnection继承自URLConnection,可用于向指定网站发送GET、POST请求。除此之外,在Android中,androidSDK中集成了Apache的HttpClient模块,用来提供高效的、最新的、功能丰富的支持 HTTP 协议工具包,并且它支持 HTTP 协议最新的版本和建议。
GET请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),以?分割URL和传输数据,参数之间以&相连;POST把提交的数据则放置在是HTTP包的包体中.GET方式提交的数据一般较少,POST可传较大量的数据.
获得HttpURLConnectio对象的方法很简单,利用URL对象的openConnection方法即可,创建好connection对象后即可调用getInputStream()或者
getOutputStream()方法来发送或请求数据.
下面的范例是采用HttpURLConnectio连接网络,并分别实现get和post方法来请求数据的功能,附件为完整代码,有兴趣的朋友可以下载看看.
- package com.duan.netlogin.utils;
- import java.io.ByteArrayOutputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.OutputStream;
- import java.net.HttpURLConnection;
- import java.net.URL;
- import java.net.URLEncoder;
- import android.util.Log;
- public class netUtils {
- private static final String TAG = "netUtils";
- /**
- * 使用post方式登陆
- *
- * @param username
- * @param password
- * @return
- */
- public static String loginOfPost(String username, String password) {
- HttpURLConnection conn = null;
- try {
- // 创建一个URL对象
- URL mURL = new URL("http://192.168.0.100:8080/android/servlet/LoginServlet");
- // 调用URL的openConnection()方法,获取HttpURLConnection对象
- conn = (HttpURLConnection) mURL.openConnection();
- conn.setRequestMethod("POST");// 设置请求方法为post
- conn.setReadTimeout(5000);// 设置读取超时为5秒
- conn.setConnectTimeout(10000);// 设置连接网络超时为10秒
- conn.setDoOutput(true);// 设置此方法,允许向服务器输出内容
- // post请求的参数
- String data = "username=" + username + "&password=" + password;
- // 获得一个输出流,向服务器写数据,默认情况下,系统不允许向服务器输出内容
- OutputStream out = conn.getOutputStream();// 获得一个输出流,向服务器写数据
- out.write(data.getBytes());
- out.flush();
- out.close();
- int responseCode = conn.getResponseCode();// 调用此方法就不必再使用conn.connect()方法
- if (responseCode == 200) {
- InputStream is = conn.getInputStream();
- String state = getStringFromInputStream(is);
- return state;
- } else {
- Log.i(TAG, "访问失败" + responseCode);
- }
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- if (conn != null) {
- conn.disconnect();// 关闭连接
- }
- }
- return null;
- }
- /**
- * 使用get方式登陆
- *
- * @param username
- * @param password
- * @return
- */
- public static String loginOfGet(String username, String password) {
- HttpURLConnection conn = null;
- String data = "username=" + URLEncoder.encode(username) + "&password="+ URLEncoder.encode(password);
- String url = "http://192.168.0.100:8080/android/servlet/LoginServlet?"+ data;
- try {
- // 利用string url构建URL对象
- URL mURL = new URL(url);
- conn = (HttpURLConnection) mURL.openConnection();
- conn.setRequestMethod("GET");
- conn.setReadTimeout(5000);
- conn.setConnectTimeout(10000);
- int responseCode = conn.getResponseCode();
- if (responseCode == 200) {
- InputStream is = conn.getInputStream();
- String state = getStringFromInputStream(is);
- return state;
- } else {
- Log.i(TAG, "访问失败" + responseCode);
- }
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- if (conn != null) {
- conn.disconnect();
- }
- }
- return null;
- }
- /**
- * 根据流返回一个字符串信息 *
- * @param is
- * @return
- * @throws IOException
- */
- private static String getStringFromInputStream(InputStream is)
- throws IOException {
- ByteArrayOutputStream os = new ByteArrayOutputStream();
- // 模板代码 必须熟练
- byte[] buffer = new byte[1024];
- int len = -1;
- // 一定要写len=is.read(buffer)
- // 如果while((is.read(buffer))!=-1)则无法将数据写入buffer中
- while ((len = is.read(buffer)) != -1) {
- os.write(buffer, 0, len);
- }
- is.close();
- String state = os.toString();// 把流中的数据转换成字符串,采用的编码是utf-8(模拟器默认编码)
- os.close();
- return state;
- }
- }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。