Apache 大三方法HTTP请求链接响应之HttpClient的GET和POST工具类封装

原创 2015年11月20日 00:29:41

一、在HttpConnectUtils 定义一个回调接口,并注册接口

<span style="font-size:14px;">/** 第一步定义接口 */
	public interface HTTPCallBack {
		public void returnMessage(String message);
	}
	
	/** 注册接口 */
	HTTPCallBack httpCallBack;</span>


、定义HttpClient的请求方法GET和POST

<span style="font-size:14px;">public interface RequestMethod {
		public static final String GET = "GET";
		public static final String POST = "POST";

	}</span>


、构建一个方法更具GET和POST方法等返回一个HttpUriRequest对象

<span style="font-size:14px;">/**
	 * 主要返回HttpUriRequest对象供上层调用
	 * 
	 * @param url
	 *            服务器网络地址String型
	 * @param requestMethod
	 *            HttpClient请求方法
	 * @param params
	 *            需要传的参数HashMap<String, Object>型
	 * @return
	 */
	private HttpUriRequest getHttpUriRequest(String url, String requestMethod, HashMap<String, Object> params) {
		HttpUriRequest request = null;
		if (requestMethod.equals(RequestMethod.GET)) {
			
			/**
			 * StringBuilder拼接字符串
			 */
			StringBuilder builder = new StringBuilder();
			builder.append("?");
			String urls = url;
			if (params.size() != 0 && params != null) {
				//HashMap简直对遍历
				for (String key : params.keySet()) {
					
					String name = key;
					Object value = params.get(key);
					builder.append(name + "=" + value);
					builder.append("&");
				}
				String parameter = builder.substring(0, (builder.toString().length() - 1));
				urls = urls + parameter;

			}
			request = new HttpGet(urls);
		} else if (requestMethod.equals(RequestMethod.POST)) {
			request = new HttpPost(url);
			ArrayList<BasicNameValuePair> pairs = new ArrayList<BasicNameValuePair>();
			if (params.size() != 0 && params != null) {
				for (String key : params.keySet()) {
					/**Apache的HttpClient——POST请求方法需要用到BasicNameValuePair类以键值对赋值
					 * 并将对象存入集合中,将集合对象作为参数付给HttpEntity对象,在加载到请求方法对象中去,同时注意中文乱码准备
					 * */
					BasicNameValuePair valuePair = new BasicNameValuePair(key, (String) params.get(key));
					pairs.add(valuePair);

				}
				try {

					// 防止中文乱码
					HttpEntity entity = new UrlEncodedFormEntity(pairs, HTTP.UTF_8);
					request.setHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
					((HttpPost) request).setEntity(entity);

				} catch (UnsupportedEncodingException e) {
					e.printStackTrace();
				}

			}

		}
		return request;

	}</span>


第四、创建一个方法得,并传入HttpUriRequest对象到请求返回的参数值


<span style="font-size:18px;">/**
	 * 主要作用就是请求网络得到响应参数
	 * 
	 * @param urls
	 *            服务器网络地址String型
	 * @param requestMethod
	 *            HttpClient请求方法
	 * @param parameter
	 *            需要传的参数HashMap<String, Object>型
	 * @return
	 */
	private String getHttpClientResultData(String urls, String requestMethod, HashMap<String, Object> parameter) {
		HttpClient client = new DefaultHttpClient();
		HttpUriRequest request = getHttpUriRequest(urls, requestMethod, parameter);
		String str = null;
		try {
			HttpResponse response = client.execute(request);
			str = EntityUtils.toString(response.getEntity());
		} catch (ClientProtocolException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return str;

	}</span>


五、根据返回的参数值采用异步任务执行代码,调用接口方法


<span style="font-size:14px;">/**
	 * 有参处理 异步任务执行网络请求相应处理 根据传URI 参数,请求方式, 从服务端获取数据
	 * 
	 * @param urls
	 *            服务器网络地址String型
	 * @param requestMethod
	 *            HttpClient请求方法
	 * @param parameter
	 *            需要传的参数HashMap<String, Object>型
	 * @param httpCallBacks
	 *            需要回调的接口实例
	 */
	public void asyncTaskRunHttpClient(String urls, final String requestMethod, final HashMap<String, Object> parameter,
			final HTTPCallBack httpCallBacks) {
		httpCallBack = httpCallBacks;
		AsyncTask<String, Void, String> asyncTask = new AsyncTask<String, Void, String>() {

			@Override
			protected String doInBackground(String... params) {

				return getHttpClientResultData(params[0], requestMethod, parameter);
			}

			@Override
			protected void onPostExecute(String result) {
				super.onPostExecute(result);
				if (result != null) {
					httpCallBack.returnMessage(result);
				}

			};
		};
		asyncTask.execute(urls);
	}</span>

、客户端调用工具类,实现接口的方法,便实现回调


case R.id.httpclient_utils_apache_post_button:
			String url = "http://192.168.2.110:8080/app/login";//写自己的服务器地址
			String method = "POST";
			HashMap<String, Object> map = new HashMap<String, Object>();
			map.put("user", "admin");
			map.put("psw", "123456");
			new HttpConnectUtils().asyncTaskRunHttpClient(url, method, map, new HTTPCallBack() {
				
				@Override
				public void returnMessage(String message) {
					mTextView.setText(message);
				}
			});
			break;



版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Dorsey_c/article/details/49936975

https在云服务器请求的启用

-
  • 1970年01月01日 08:00

HTTP之请求响应内容详解

HTTP协议(重点)协议:协议的甲乙双方,就是客户端(浏览器)和服务器!  理解成双方通信的格式!请求协议;响应协议;  1 安装HttpWatchHttpWatch是专门为IE浏览器提供的,用来查看...
  • qq_25827845
  • qq_25827845
  • 2017-01-15 15:47:46
  • 2546

HTTP 请求和应答详解

http协议的请求和应答包详解
  • acpchenpeng
  • acpchenpeng
  • 2015-11-17 18:40:07
  • 2362

实现HTTP服务器的三种方法

1、使用socket简单实现http协议: //参考链接:http://blog.csdn.net/sunxing007/article/details/4305956 [java] ...
  • qq_29663071
  • qq_29663071
  • 2016-08-23 20:10:18
  • 1544

Apache HttpClient使用详解

转载地址:http://eksliang.iteye.com/blog/2191017 Http协议的重要性相信不用我多说了,HttpClient相比传统JDK自带的URLConne...
  • u013473691
  • u013473691
  • 2016-08-24 10:04:17
  • 4242

HTTP请求及应答

HTTP(HyperText Transfer Protocol)是一套计算机通过网络进行通信的规则。计算机专家设计出HTTP,使HTTP客户(如Web浏览器)能够从HTTP服务器(Web服务器)请求...
  • shaopeng5115
  • shaopeng5115
  • 2015-07-09 09:47:37
  • 659

HTTP Get,Post请求详解

请求类型 三种最常见的请求类型是:GET,POST 和 HEAD GET:获取一个文档 大部分被传输到浏览器的html,images,js,css, … 都是通过GET方法发出请求的。它是获取数...
  • afeiluo
  • afeiluo
  • 2013-11-18 16:48:09
  • 65427

httpget请求

import java.io.IOException; import java.net.URLEncoder; import org.apache.commons.httpclient.Defau...
  • zhang3285489
  • zhang3285489
  • 2014-05-26 22:22:22
  • 235

tomcat服务器与Http协议之请求(get请求、post请求)和响应

1 Web开发入门 /* 1.1 引入 之前的程序: java桌面程序,控制台控制,socket gui界面。javase规范 现在和以后的程序:java web程序。浏览器控制。javaee规...
  • tideseng
  • tideseng
  • 2017-04-13 02:48:36
  • 3400

使用Apache HttpClient发送get、post请求

一、java代码 说明: post请求入参为java对象。 含get和post两种方式的http请求。 package com.hcb.util; import java.io.IOExce...
  • lxxxzzl
  • lxxxzzl
  • 2015-02-13 17:27:37
  • 2230
收藏助手
不良信息举报
您举报文章:Apache 大三方法HTTP请求链接响应之HttpClient的GET和POST工具类封装
举报原因:
原因补充:

(最多只允许输入30个字)