Android23_网络存储之HttpClient

来源:互联网 发布:中国货币供给量数据 编辑:程序博客网 时间:2024/06/08 17:54
一、HttpClient网络访问:
(一)、简介:
1、Apache组织提供了HttpClient项目,可以实现网络访问。在Android中,成功集成了HttpClient,所以在Android中可以直接使用HttpClient访问网络。
2、与HttpURLConnection相比,HttpClient将前者中的输入、输出流操作,统一封装成HttpGet、HttpPost、HttpRequest类。
  • HttpClient:网络连接对象;
  • HttpGet:代表发送GET请求;
  • HttpPost:代表发送POST请求;
  • HttpResponse:代表处理服务器响应的对象。
  • HttpEntity对象:该对象中包含了服务器所有的返回内容。
3、使用步骤:(六部曲)【重点
  1. 创建HttpClient对象:通过实例化DefaultHttpClient获得;
  2. 创建HttpGet或HttpPost对象:通过实例化 HttpGet或HttpPost 获得,而构造方法的参数是urlstring(即需要访问的网络url地址)。也可以通过调用setParams()方法来添加请求参数;
  3. 调用HttpClient对象的execute()方法,参数是刚才创建的 HttpGet或HttpPost对象 ,返回值是HttpResponse对象;
  4. 通过response对象中的getStatusLine()方法和getStatusCode()方法获取服务器响应状态是否是200。
  5. 调用 HttpResponse对象的getEntity()方法,返回HttpEntity对象。而该对象中包含了服务器所有的返回内容。
  6. 借助EntityUtils的toString()方法或toByteArray()对 HttpEntity对象进行处理,也可以通过IO流对 HttpEntity对象进行操作。

(二)、封装HttpClientHelper工具类:

public class HttpClientHelper {

public static HttpClient checkNetwork(String url) {

HttpClient httpClient = new DefaultHttpClient();

HttpGet request = new HttpGet(url);

HttpResponse httpResponse = null;

try {

httpResponse = httpClient.execute(request);

if (httpResponse.getStatusLine().getStatusCode() == 200) {

return httpClient;

}

catch (ClientProtocolException e) {

e.printStackTrace();

catch (IOException e) {

e.printStackTrace();

}

return null;

}


/**

 * 作用:实现网络访问文件,将获取到数据储存在文件流中

 * 

 * @param url

 *            :访问网络的url地址

 * @return inputstream

 */

public static InputStream loadFileFromURL(String url) {

HttpClient httpClient = new DefaultHttpClient();

HttpGet requestGet = new HttpGet(url);

HttpResponse httpResponse;

try {

httpResponse = httpClient.execute(requestGet);

if (httpResponse.getStatusLine().getStatusCode() == 200) {

HttpEntity entity = httpResponse.getEntity();

return entity.getContent();

}

catch (Exception e) {

e.printStackTrace();

}

return null;

}


/**

 * 作用:实现网络访问文件,将获取到的数据存在字节数组中

 * 

 * @param url

 *            :访问网络的url地址

 * @return byte[]

 */

public static byte[] loadByteFromURL(String url) {

HttpClient httpClient = new DefaultHttpClient();

HttpGet requestGet = new HttpGet(url);

try {

HttpResponse httpResponse = httpClient.execute(requestGet);

if (httpResponse.getStatusLine().getStatusCode() == 200) {

HttpEntity httpEntity = httpResponse.getEntity();

return EntityUtils.toByteArray(httpEntity);

}

catch (Exception e) {

e.printStackTrace();

System.out.println("====>" + e.toString());

}

return null;

}


/**

 * 作用:实现网络访问文件,返回字符串

 * 

 * @param url

 *            :访问网络的url地址

 * @return String

 */

public static String loadTextFromURL(String url) {

HttpClient httpClient = new DefaultHttpClient();

HttpGet requestGet = new HttpGet(url);

try {

HttpResponse httpResponse = httpClient.execute(requestGet);

if (httpResponse.getStatusLine().getStatusCode() == 200) {

HttpEntity httpEntity = httpResponse.getEntity();

return EntityUtils.toString(httpEntity, "utf-8");

}

catch (Exception e) {

e.printStackTrace();

}

return null;

}


/**

 * 作用:实现网络访问文件,先给服务器通过“GET”方式提交数据,再返回相应的数据

 * 

 * @param url

 *            :访问网络的url地址

 * @param params

 *            String url:访问url时,需要传递给服务器的参数。

 *            第二个参数格式为:username=wangxiangjun&password=123456

 * @return byte[]

 */

public static byte[] doGetSubmit(String url, String params) {

HttpClient httpClient = new DefaultHttpClient();

HttpGet requestGet = new HttpGet(url + "?" + params);

try {

HttpResponse httpResponse = httpClient.execute(requestGet);

if (httpResponse.getStatusLine().getStatusCode() == 200) {

HttpEntity httpEntity = httpResponse.getEntity();

return EntityUtils.toByteArray(httpEntity);

}

catch (Exception e) {

e.printStackTrace();

}

return null;

}


/**

 * 作用:实现网络访问文件,先给服务器通过“POST”方式提交数据,再返回相应的数据

 * 

 * @param url

 *            :访问网络的url地址

 * @param params

 *            String url:访问url时,需要传递给服务器的参数。 第二个参数为:List<NameValuePair>

 * @return byte[]

 */

public static byte[] doPostSubmit(String url, List<NameValuePair> params) {

HttpClient httpClient = new DefaultHttpClient();

HttpPost requestPost = new HttpPost(url);

try {

requestPost.setEntity(new UrlEncodedFormEntity(params, "utf-8"));

HttpResponse httpResponse = httpClient.execute(requestPost);

if (httpResponse.getStatusLine().getStatusCode() == 200) {

HttpEntity httpEntity = httpResponse.getEntity();

return EntityUtils.toByteArray(httpEntity);

}

catch (Exception e) {

e.printStackTrace();

}

return null;

}


/**

 * 作用:实现网络访问文件,先给服务器通过“POST”方式提交数据,再返回相应的数据

 * 

 * @param url

 *            :访问网络的url地址

 * @param params

 *            String url:访问url时,需要传递给服务器的参数。 Map<String , Object>

 * @return byte[]

 */

public static byte[] doPostSubmit(String url, Map<String, Object> params) {

HttpClient httpClient = new DefaultHttpClient();

HttpPost requestPost = new HttpPost(url);


List<BasicNameValuePair> parameters = new ArrayList<BasicNameValuePair>();

try {

if (params != null) {

for (Map.Entry<String, Object> entry : params.entrySet()) {

String key = entry.getKey();

String value = entry.getValue().toString();

BasicNameValuePair nameValuePair = new BasicNameValuePair(

key, value);

parameters.add(nameValuePair);

}

}

requestPost

.setEntity(new UrlEncodedFormEntity(parameters, "utf-8"));

HttpResponse httpResponse = httpClient.execute(requestPost);


if (httpResponse.getStatusLine().getStatusCode() == 200) {

HttpEntity httpEntity = httpResponse.getEntity();

return EntityUtils.toByteArray(httpEntity);

}

catch (Exception e) {

e.printStackTrace();

}

return null;

}

}



注:

POST和GET在表单提交时的区别:【重点】
  Post传递必须依赖于表单,传值的内容没有大小限制,传值内容不会在地址栏显示,比 Get 传值安全;
  Get传值的内容会通过地址栏显示,而地址栏长度有最大长度限制,因为 Get 传参内容不可以过长,当超过某个长度后会自动裁切掉多余内容。比起 Post 传参, Get 传参不够安全。但是 Get 传参可以通过表单,也可以不通过表单,直接通过地址栏传参。因此 Get 传参更灵活。


0 0
原创粉丝点击