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方法来请求数据的功能,附件为完整代码,有兴趣的朋友可以下载看看.

  1. package com.duan.netlogin.utils;
  2. import java.io.ByteArrayOutputStream;
  3. import java.io.IOException;
  4. import java.io.InputStream;
  5. import java.io.OutputStream;
  6. import java.net.HttpURLConnection;
  7. import java.net.URL;
  8. import java.net.URLEncoder;
  9. import android.util.Log;
  10. public class netUtils {
  11.         private static final String TAG = "netUtils";
  12.         /**
  13.          * 使用post方式登陆
  14.          * 
  15.          * @param username
  16.          * @param password
  17.          * @return
  18.          */
  19.         public static String loginOfPost(String username, String password) {
  20.                 HttpURLConnection conn = null;
  21.                 try {
  22.                         // 创建一个URL对象
  23.                         URL mURL = new URL("http://192.168.0.100:8080/android/servlet/LoginServlet");
  24.                         // 调用URL的openConnection()方法,获取HttpURLConnection对象
  25.                         conn = (HttpURLConnection) mURL.openConnection();
  26.                         conn.setRequestMethod("POST");// 设置请求方法为post
  27.                         conn.setReadTimeout(5000);// 设置读取超时为5秒
  28.                         conn.setConnectTimeout(10000);// 设置连接网络超时为10秒
  29.                         conn.setDoOutput(true);// 设置此方法,允许向服务器输出内容
  30.                         // post请求的参数
  31.                         String data = "username=" + username + "&password=" + password;
  32.                         // 获得一个输出流,向服务器写数据,默认情况下,系统不允许向服务器输出内容
  33.                         OutputStream out = conn.getOutputStream();// 获得一个输出流,向服务器写数据
  34.                         out.write(data.getBytes());
  35.                         out.flush();
  36.                         out.close();
  37.                         int responseCode = conn.getResponseCode();// 调用此方法就不必再使用conn.connect()方法
  38.                         if (responseCode == 200) {
  39.                                 InputStream is = conn.getInputStream();
  40.                                 String state = getStringFromInputStream(is);
  41.                                 return state;
  42.                         } else {
  43.                                 Log.i(TAG, "访问失败" + responseCode);
  44.                         }
  45.                 } catch (Exception e) {
  46.                         e.printStackTrace();
  47.                 } finally {
  48.                         if (conn != null) {
  49.                                 conn.disconnect();// 关闭连接
  50.                         }
  51.                 }
  52.                 return null;
  53.         }
  54.         /**
  55.          * 使用get方式登陆
  56.          * 
  57.          * @param username
  58.          * @param password
  59.          * @return
  60.          */
  61.         public static String loginOfGet(String username, String password) {
  62.                 HttpURLConnection conn = null;
  63.                 String data = "username=" + URLEncoder.encode(username) + "&password="+ URLEncoder.encode(password);
  64.                 String url = "http://192.168.0.100:8080/android/servlet/LoginServlet?"+ data;
  65.                 try {
  66.                         // 利用string url构建URL对象
  67.                         URL mURL = new URL(url);
  68.                         conn = (HttpURLConnection) mURL.openConnection();
  69.                         conn.setRequestMethod("GET");
  70.                         conn.setReadTimeout(5000);
  71.                         conn.setConnectTimeout(10000);
  72.                         int responseCode = conn.getResponseCode();
  73.                         if (responseCode == 200) {
  74.                                 InputStream is = conn.getInputStream();
  75.                                 String state = getStringFromInputStream(is);
  76.                                 return state;
  77.                         } else {
  78.                                 Log.i(TAG, "访问失败" + responseCode);
  79.                         }
  80.                 } catch (Exception e) {
  81.                         e.printStackTrace();
  82.                 } finally {
  83.                         if (conn != null) {
  84.                                 conn.disconnect();
  85.                         }
  86.                 }
  87.                 return null;
  88.         }
  89.         /**
  90.          * 根据流返回一个字符串信息         * 
  91.          * @param is
  92.          * @return
  93.          * @throws IOException
  94.          */
  95.         private static String getStringFromInputStream(InputStream is)
  96.                         throws IOException {
  97.                 ByteArrayOutputStream os = new ByteArrayOutputStream();
  98.                 // 模板代码 必须熟练
  99.                 byte[] buffer = new byte[1024];
  100.                 int len = -1;
  101.                 // 一定要写len=is.read(buffer)
  102.                 // 如果while((is.read(buffer))!=-1)则无法将数据写入buffer中
  103.                 while ((len = is.read(buffer)) != -1) {
  104.                         os.write(buffer, 0, len);
  105.                 }
  106.                 is.close();
  107.                 String state = os.toString();// 把流中的数据转换成字符串,采用的编码是utf-8(模拟器默认编码)
  108.                 os.close();
  109.                 return state;
  110.         }
  111. }

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。