Android 网络请求方式之HttpClient,GET,POST,PUT请求使用方法

来源:互联网 发布:wineskin for mac 编辑:程序博客网 时间:2024/05/01 15:20

 HttpClient是Apache开源组织提供的HTTP网络访问接口,HttpClient封装了访问http的请求头,参数,内容体,响应等等,有很多API,可以很方便的处理session,cookie等(在某些情况下,用HttpURLConnection访问一些特定的页面,处理session,cookie相当复杂),比较稳定,发送请求、接收响应都很简单。

可以简单的分为几步执行:

1.1 创建请求对象:GET方式参数拼接在URL结尾,POST方式需要使用setEntity(HttpEntity entity)方法来设置请求参数;

1.2 获取HttpClient对象;

1.3 发送请求;

1.4 得到响应,获取数据;

 直接上代码,注释已经解释的很清楚了。

1. 首先设置一些基本的参数来获取线程安全的HttpClient对象


/** * 设置一些基本的参数来获取线程安全的HttpClient对象 *  * @return 返回线程安全的HttpClient对象 */private static HttpClient getHttpClient() {/* 1. 设置一些基本参数,如Http版本、编码格式和参数设置 */HttpParams httpParams = new BasicHttpParams();HttpProtocolParams.setVersion(httpParams, HttpVersion.HTTP_1_1);HttpProtocolParams.setContentCharset(httpParams, "UTF-8");HttpProtocolParams.setUseExpectContinue(httpParams, true);/* 2. 超时设置 *//* 从连接池中取连接的超时时间 */ConnManagerParams.setTimeout(httpParams, 20000);/* 连接超时 */HttpConnectionParams.setConnectionTimeout(httpParams, 20000);/* 请求超时 */HttpConnectionParams.setSoTimeout(httpParams, 20000);/* 3. 设置我们的HttpClient支持HTTP和HTTPS两种模式 */SchemeRegistry registry = new SchemeRegistry();registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));registry.register(new Scheme("https", SSLSocketFactory.getSocketFactory(), 443));/* 4. 使用线程安全的连接管理来创建HttpClient */ClientConnectionManager manager = new ThreadSafeClientConnManager(httpParams, registry);return new DefaultHttpClient(manager, httpParams);}

2.1. HttpClient Post请求方式


<pre name="code" class="java">/** * HttpClient Post请求方式 */public static boolean onLinkNetPost(String url, List<NameValuePair> nvpsList) {try {// 判断传递进来的url连接地址是否为空if (null == url) {return false;}/* 1.1 创建POST请求,并设置Url地址的名值对及其编码格式,然后设置Entity */Log.e("post", url);HttpPost httpPost = new HttpPost(url);if (null != nvpsList) {UrlEncodedFormEntity entity = new UrlEncodedFormEntity(nvpsList, "UTF-8");httpPost.setEntity(entity);}/* 1.2获取HttpClient对象,并发送请求,得到响应 */HttpClient httpClient = getHttpClient();// 1.3发送请求,获取服务器返回的相应对象  HttpResponse httpResponse = httpClient.execute(httpPost);/* 1.4 从响应中获取数据 */if (httpResponse.getStatusLine().getStatusCode() != HttpStatus.SC_OK) {return false;}HttpEntity httpEntity = httpResponse.getEntity();String object = (httpEntity == null) ? null : (EntityUtils.toString(httpEntity, "UTF-8"));Log.e("object", object);return true;} catch (Exception e) {e.printStackTrace();Log.e("Exception=", e.getMessage() + "");Log.e("e", e.getMessage() + "");return false;}}


2.2. HttpClient Get请求方式

<pre name="code" class="java">/** * HttpClient Get请求方式 */public static boolean onLinkNetGet(String url, Map<String, String> params) {try {// GET方式参数拼接在URL结尾StringBuilder sb = new StringBuilder();sb.append(url).append("?");if (params != null && params.size() != 0) {for (Map.Entry<String, String> entry : params.entrySet()) {// 如果请求参数中有中文,需要进行URLEncoder编码sb.append(entry.getKey()).append("=").append(URLEncoder.encode(entry.getValue(), "utf-8"));sb.append("&");}sb.deleteCharAt(sb.length() - 1);System.out.println(sb.toString());Log.d("sb", sb.toString());}/* 1.1 创建Get请求,并设置Url地址 */HttpGet httpGet = new HttpGet(sb.toString());Log.e("get", sb.toString());/* 1.2 获取HttpClient对象,并发送请求,得到响应 */HttpClient httpClient = getHttpClient();// 1.3发送请求,获取服务器返回的相应对象  HttpResponse httpResponse = httpClient.execute(httpGet);/* 1.4 从响应中获取数据 */if (httpResponse.getStatusLine().getStatusCode() != HttpStatus.SC_OK) {return false;}HttpEntity httpEntity = httpResponse.getEntity();String object = (httpEntity == null) ? null : (EntityUtils.toString(httpEntity, "UTF-8"));System.out.println(object);Log.e("object", object);return true;} catch (Exception e) {e.printStackTrace();Log.e("Exception=", e.getMessage() + "");Log.e("e", e.getMessage() + "");return false;}}

2.3. HttpClient Put请求方式

   <pre name="code" class="java">// Put方式public static boolean onLinkNetPut(String url, Map<String, String> params) {try {/* 1. 判断传递进来的url连接地是否为空 */if (null == url) {return false;}StringBuilder sb = new StringBuilder();sb.append(url).append("?");if (params != null && params.size() != 0) {for (Map.Entry<String, String> entry : params.entrySet()) {// 如果请求参数中有中文,需要进行URLEncoder编码sb.append(entry.getKey()).append("=").append(URLEncoder.encode(entry.getValue(), "utf-8"));sb.append("&");}sb.deleteCharAt(sb.length() - 1);System.out.println(sb.toString());Log.d("sb", sb.toString());}/* 1.1 创建httpPut请求,并设置Url地址 */HttpPut httpPut = new HttpPut(sb.toString());Log.e("start", sb.toString());/* 1.2 获取HttpClient对象,并发送请求,得到响应 */HttpClient httpClient = getHttpClient();// 1.3发送请求,获取服务器返回的相应对象  HttpResponse httpResponse = httpClient.execute(httpPut);/* 1.4从响应中获取数据 */if (httpResponse.getStatusLine().getStatusCode() != HttpStatus.SC_OK) {return false;}HttpEntity httpEntity = httpResponse.getEntity();String object = (httpEntity == null) ? null : (EntityUtils.toString(httpEntity, "UTF-8"));Log.e("object", object);return true;} catch (Exception e) {e.printStackTrace();Log.e("Exception=", e.getMessage() + "");Log.e("e", e.getMessage() + "");return false;}}

3. 使用

//Login Post请求方式public  static boolean Login(String login_name, String password) {List<NameValuePair> nvpsList =new ArrayList<NameValuePair>();try {nvpsList.add(new BasicNameValuePair("login_name",login_name));nvpsList.add(new BasicNameValuePair("password",password));} catch (Exception e) {e.printStackTrace();}String url  = "Your Url";return onLinkNetPost(url,nvpsList);}



1 0
原创粉丝点击