HTTP网络请求Apache方式的简单封装

原创 2015年11月20日 10:37:52

下面是对apche方式的网络请求进行的一个简单封装

主要用到的类:

HttpClient client = new DefaultHttpClient();

HttpGet/HttpPost---父类 HttpUriRequest

HttpResponse

工具类EntityUtils.toString(response.getEntity);获取服务器响应内容

post传数据:

BasicNameValuePair

HttpEntity entity = new UrlEncodeFormEntity(List<BasicNameValuePair>);

request.setEntity(entity,encodecharset);


使用:

不传参数:

new HttpConnectUtil().httpConnectByApache(Method.GET|Method.POST, String httpUrl, 

new HttpConnectionResponse(){

<span style="font-size:18px;">public void handleHttpResponse(String response)<span style="font-size:18px;">{</span></span>
}});

传参数:

new HttpConnectUtil().httpConnectByApache(Method requestMethod, String httpUrl,
HashMap<String, Object> values, HttpConnectionResponse response);


package com.scxh.android.httpconnect;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.util.ArrayList;
import java.util.HashMap;

import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;

import android.os.AsyncTask;

/*
 * apache网络请求工具类
 */
public class HttpConnectUtil {
	HttpConnectionResponse httpResponse;// 定義的接口

	public enum Method {
		GET, POST;
	}

	/*
	 * public static final String GET = "GET"; 
	 * public static final String POST ="POST";
	 */

	/** 定义的接口,用于回调 */
	public interface HttpConnectionResponse {
		public void handleHttpResponse(String response);
	}

	/*
	 * 不用传数据的请求
	 */
	public void httpConnectByApache(final Method requestMethod, String httpUrl,

	HttpConnectionResponse response) {
		httpResponse = response;
		new AsyncTask<String, Void, String>() {

			@Override
			protected String doInBackground(String... params) {
				HttpClient client = new DefaultHttpClient();
				HttpUriRequest request;
				/* get请求方式 */
				if (Method.GET.equals(requestMethod)) {
					request = getRequest(params[0], null);

				}
				/* post请求方式 */
				else if (requestMethod.equals(Method.POST)) {
					request = postRequest(params[0], null);
				} else {
					throw new NullPointerException("请求方式只能为get或者post");
				}
				return connectSuccessResponse(request, client);
			}

			/* 对返回结果的一个处理,回调方式实现* */
			@Override
			protected void onPostExecute(String result) {
				if (result != null) {
					httpResponse.handleHttpResponse(result);
				}

			}
		}.execute(httpUrl);

	}
<span style="white-space:pre">		</span>/*需要传参数的网络请求*/
	public void httpConnectByApache(final Method requestMethod, String httpUrl,
			final HashMap<String, Object> values,
			HttpConnectionResponse response) {
		httpResponse = response;
		new AsyncTask<String, Void, String>() {

			@Override
			protected String doInBackground(String... params) {
				HttpClient client = new DefaultHttpClient();
				HttpUriRequest request;
				/* get请求方式 */
				if (requestMethod.equals(Method.GET)) {
					request = getRequest(params[0], values);

				}
				/* post请求方式 */
				else if (requestMethod.equals(Method.POST)) {
					request = postRequest(params[0], values);
				} else {
					throw new NullPointerException("请求方式只能为get或者post");
				}
				return connectSuccessResponse(request, client);
			}

			/* 对返回结果的一个处理,回调方式实现* */
			@Override
			protected void onPostExecute(String result) {
				httpResponse.handleHttpResponse(result);
			}
		}.execute(httpUrl);

	}

	/*
	 * 不同连接状态的不同处理方式
	 */
	private String connectSuccessResponse(HttpUriRequest request,
			HttpClient client) {
		try {
			HttpResponse response = client.execute(request);
			/* code:返回的响应状态码 */
			/* 200:成功,4开头:客户端错误,5:服务器错误 */
			int code = response.getStatusLine().getStatusCode();

			switch (code) {

			case HttpURLConnection.HTTP_OK:// 200
				return EntityUtils.toString(response.getEntity());

			case 404:
				return "文件不能被找到";

			default:
				return "处理异常";

			}

		} catch (ClientProtocolException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

		return null;
	}

	/*
	 * get方式请求连接
	 */

	private HttpUriRequest getRequest(String httpUrl,
			HashMap<String, Object> values) {
		String url = httpUrl + "?";
		if (values != null) {
			for (String key : values.keySet()) {
				url = url + key + "=" + values.get(key) + "&";
			}
		}

		HttpGet request = new HttpGet(url);
		return request;
	}

	/*
	 * post方式请求连接
	 */
	private HttpUriRequest postRequest(String httpUrl,
			HashMap<String, Object> values) {

		HttpPost request = new HttpPost(httpUrl);
		if (values != null) {
			sendParamsByPost(request, values);
		}
		return request;

	}

	/*
	 * 通过post请求方式传参数
	 */
	private void sendParamsByPost(HttpPost request,
			HashMap<String, Object> values) {
		ArrayList<BasicNameValuePair> pairs = new ArrayList<BasicNameValuePair>();
		/* 遍历hashmap,將鍵值對存入BasicNameValuePair中 */
		for (String key : values.keySet()) {
			BasicNameValuePair value = new BasicNameValuePair(key,
					(String) values.get(key));
			pairs.add(value);
		}
		try {
			request.setEntity(new UrlEncodedFormEntity(pairs, "UTF-8"));
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}

	}

}




版权声明:本文为博主原创文章,未经博主允许不得转载。

iOS简单封装网络请求,使用block回掉函数方式

// 002 //  RequestHttpClass.h 003 //  封装简单的异步请求 ...

Android中使用Volley开源库进行Http网络请求(POST方式)

之前使用了开源网络请求库Volley进行了Http GET请求。这次我们讨论使用Volley进行POST请求。POST请求比GET稍微复杂一点点。可以认为是建立在GET的基础上。POST使发送的url...

百度语音识别REST API——通过使用Http网络请求方式获得语音识别功能

较之开发者常用的获取语音识别功能的方法,本方法最大的优势是轻量级,不需要在所开发的应用中集成任何SDK开发工具包,也不需要在测试机中添加任何识别引擎软件,开发者只要了解Http网络请求以及百度语音识别...
  • zpf8861
  • zpf8861
  • 2014年06月19日 13:59
  • 18656

cocos-js Http方式网络请求

网络结构网络结构是网络的构建方式,目前流行的有客户端服务器结构网络和点对点结构网络。客户端服务器结构网络客户端服务器结构网络是一种主从结构网络。服务器一般处于等待状态,如果有客户端请求,服务器响应请求...

Android中使用Volley开源库进行Http网络请求(GET方式)

在之前的Http网络请求中,我们一般使用输入流以及缓冲区的方式进行访问,然后从服务器获取返回的数据。代码行数近20行,而且网络操作是放在Thread线程中进行的,对于Java或者Android的线程还...

Http协议网络请求java方式

HTTP消息:客户端请求,服务器响应 主要请求方式: GET:数据附在url后面,只能传字符串,且数据量小,安全性差。 POST:数据量大,支持各种数据类型,安全性高,服务器先接受数据长度再接收内容。...

Android开发笔记-使用Volley开源库进行Http网络请求(POST方式)

之前使用了开源网络请求库Volley进行了Http GET请求。这次我们讨论使用Volley进行POST请求。POST请求比GET稍微复杂一点点。可以认为是建立在GET的基础上。POST使发送的url...
  • errvv
  • errvv
  • 2016年01月29日 10:01
  • 200

Android网络请求框架:Android-async-http简单使用

Android-async-http网络框架:https://github.com/loopj/android-async-http * 是一款高效的数据请求,文件上传下载网络请求开源框架。 ...
  • true100
  • true100
  • 2016年01月11日 17:26
  • 929

Android网络请求HTTP简单介绍

1、使用Http的Get方式读取网络数据 get方式: import android.app.Activity; import android.os.AsyncTask; import andro...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:HTTP网络请求Apache方式的简单封装
举报原因:
原因补充:

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