HttpClient与HttpURLConnection的请求方式

 HttpURLConnection是java的标准类,HttpURLConnection继承自URLConnection,可用于向指定网站发送GET请求、POST请求。

/* *

*下面是httpURLConnection的post请求

* @param  url  链接地址“http://host:8080/Login.ashx”

* @param  params  上传参数

*/

public static String postRequst(String url, String params)
     throws IOException {

     //存放返回数据
     String resultData = "";

     //创建一个URL
     URL posturl = null;
     try {
            posturl = new URL(url);
     } catch (MalformedURLException e) {
            Log.e(TAG, "MalformedURLException");
     }

     if (posturl != null) {

            //创建一个链接
            HttpURLConnection urlConn = (HttpURLConnection) posturl .openConnection();

            //设置是否向httpUrlConnection输出,因为这个是post请求,参数要放在http正文内,因此需要设为true, 默认情况下是false;
            urlConn.setDoOutput(true);

            // 设置是否从httpUrlConnection读入,默认情况下是true;
            urlConn.setDoInput(true);

            //设置请求方式,这里设置为POST请求
            urlConn.setRequestMethod("POST");

            //设置是否使用缓存,post请求不能使用缓存
            urlConn.setUseCaches(false);

            //设置只作用于当前的实例
            urlConn.setInstanceFollowRedirects(true);

            //设定传送的内容类型是可序列化的java对象
            urlConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

     //连接
            urlConn.connect();

            //数据输出流,该语句隐含的执行connect动作
            DataOutputStream out = new DataOutputStream( urlConn.getOutputStream());

            //将参数写入流,刷新提交关闭流
            out.writeBytes(params);
            out.flush();
            out.close();

            //读取连接返回的数据
            BufferedReader reader = new BufferedReader(new InputStreamReader( urlConn.getInputStream()));
            String inputLine = null;
            while (((inputLine = reader.readLine()) != null)) {
                    resultData += inputLine + "\n";
            }
           //关闭
           reader.close();
           urlConn.disconnect();
     }
  return resultData;
}

 

在一般情况下,如果只是需要Web站点的某个简单页面提交请求并获取服务器响应,HttpURLConnection完全可以胜任。但在绝大部分情况下,Web站点的网页可能没这么简单,这些页面并不是通过一个简单的URL就可访问的,可能需要用户登录而且具有相应的权限才可访问该页面。在这种情况下,就需要涉及Session、Cookie的处理了,如果打算使用HttpURLConnection来处理这些细节,当然也是可能实现的,只是处理起来难度就大了。

HttpClient更方便更强大的解决了HttpURLConnection能做到或者不能做到的事情,HttpClient模块提供的两大类HttpPost和HttpGet实现Http请求:

       HttpPost —— 传送的数据量较大,一般被默认为不受限制。一般用于发送一些表单数据,传输数据更安全

       HttpGet —— 传送的数据量较小,不能大于2KB。一般用于请求获取一些信息,执行效率更高

 

/**

* POST请求,上传表单

* @param  url  链接地址“http://host:8080/Login.ashx”

* @param  params  上传参数List

* @param  str_agent 标识

* @return 返回获取的数据

*/

public static String postTableData(String url, List params,

                                          String str_agent) throws ConnectTimeoutException,ClientProtocolException,

                                          IOException, XmlPullParserException {

              String result = null;HttpClient httpclient = createHttpClient();// 创建一个HttpClient

              HttpPost httppost = new HttpPost(url);// 创建一个POST请求

              httppost.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));// 添加请求参数到请求对象

              httppost.setHeader("User-Agent", str_agent);//在报文头部添加一些字符串标识

              HttpResponse response = httpclient.execute(httppost);//发送请求

              HttpEntity resEntity = response.getEntity();//从响应中获取消息实体

              if (resEntity != null) {

                            result = EntityUtils.toString(resEntity);

              }

              httpclient.getConnectionManager().shutdown();//关闭连接

              return result;

}

/**

* Get请求,下载数据

* @param  url  链接地址“http://host:8080/GetList.ashx”

* @param  params  上传参数List

* @param  str_agent 标识

 * @return 返回获取的数据

* /

public static String getListData(String url, List params,

                                                        String str_agent) throws ConnectTimeoutException,ClientProtocolException,

                                                        IOException, XmlPullParserException {

              // 构建url

              if (params != null) {

                            StringBuffer buf = new StringBuffer();

                            for (int i = 0; i < params.size(); i++) {

                                          buf.append("&").append(params.get(i).getName()).append("=").append(params.get(i).getValue());

                            }

                            if (url.indexOf("?") != -1)// url已经有参数

                             {

                                          url = url + buf.toString();

                            } else {

                                          url = url + "?" + buf.toString();

                            }

              }

              String result = null; HttpClient httpclient = createHttpClient();// 创建一个HttpClient

              HttpGet httpGet = new HttpGet(url);// 创建一个Get请求

              httpGet.setHeader("User-Agent", str_agent);//在报文头部添加一些字符串标识

              HttpResponse response = httpclient.execute(httpGet);//发送请求

              HttpEntity resEntity = response.getEntity();//从响应中获取消息实体

              if (resEntity != null) {

                            result = EntityUtils.toString(resEntity);

              }

              httpclient.getConnectionManager().shutdown();//关闭连接

               return result;

}


 

你可能感兴趣的:(android开发)