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
- Android 网络请求方式之HttpClient,GET,POST,PUT请求使用方法
- Android 网络请求方式之HttpClient,GET,POST,PUT请求使用方法
- HttpClient (POST GET PUT)请求
- android网络请求之post和get请求方式
- HTTPClient get post 请求方式
- HttpClient Post、get 请求方式
- HttpClient Post、get 请求方式
- Android okhttp 三种请求方式 get put post
- Android HttpClient GET或者POST请求基本使用方法
- Android HttpClient GET或者POST请求基本使用方法
- Android HttpClient GET或者POST请求基本使用方法
- Http之Get,Post,put,delete请求
- HTTP请求之GET,POST,DELETE,PUT
- 使用HttpURLConnection和使用HttpClient方式请求网络采用get方式和post方式请求数据
- 网络请求方式 POST + GET
- 解决Android httpclient网络post/get请求性能优化
- Android使用Httpclient网络请求,get,post方法
- HttpClient封装POST,GET方式HTTP请求
- 巴菲特致股东的一封信:1993年
- Android布局优化。
- 关于shell sort命令的常用操作$
- 进入PE系统后找不到硬盘该怎么办?
- LeetCode #Single Number#
- Android 网络请求方式之HttpClient,GET,POST,PUT请求使用方法
- HDU 1037 Keep on Truckin'
- 8个不可不知的Mac OS X专用命令行工具
- 巴菲特致股东的一封信:1992年
- 刨削、插削与拉削
- WebService到底是什么?
- hdu-1160 FatMouse's Speed 【最长上升子序列】
- Python资源汇总
- 一些常用的软件开发文档分享给大家