HTTPClient模块的HttpGet和HttpPost

? ? Android?SDK集成了Apache?HttpClient模块。要注意的是,这里的Apache?HttpClient模块是HttpClient?4.0(org.apache.http.*),而不是常见的Jakarta?Commons?HttpClient?3.x(org.apache.commons.httpclient.*)。

?????????? HttpClient常用HttpGet和HttpPost这两个类,分别对应Get方式和Post方式。

?

?

?

?????????? 无论是使用HttpGet,还是使用HttpPost,都必须通过如下3步来访问HTTP资源。

?

?????????? 1.创建HttpGetHttpPost对象,将要请求的URL通过构造方法传入HttpGetHttpPost对象。

???????? ? 2.使用DefaultHttpClient类的execute方法发送HTTP?GETHTTP?POST请求,并返回HttpResponse对象。

?????????? 3.通过HttpResponse接口的getEntity方法返回响应信息,并进行相应的处理。

?????????? 如果使用HttpPost方法提交HTTP?POST请求,则需要使用HttpPost类的setEntity方法设置请求参数。参数则必须用NameValuePair[]数组存储。

???????????

?????????? HttpGet

?

[java]?view plaincopy
?
  1. ?public?String?doGet()??
  2. ????{??
  3. ????????String?uriAPI?=?"http://XXXXX?str=I+am+get+String";??
  4. ????????String?result=?"";??
  5. //??????HttpGet?httpRequst?=?new?HttpGet(URI?uri);??
  6. //??????HttpGet?httpRequst?=?new?HttpGet(String?uri);??
  7. //??????创建HttpGet或HttpPost对象,将要请求的URL通过构造方法传入HttpGet或HttpPost对象。??
  8. ????????HttpGet?httpRequst?=?new?HttpGet(uriAPI);??
  9. ??
  10. //??????new?DefaultHttpClient().execute(HttpUriRequst?requst);??
  11. ????????try?{??
  12. ???//使用DefaultHttpClient类的execute方法发送HTTP?GET请求,并返回HttpResponse对象。??
  13. ????????????HttpResponse?httpResponse?=?new?DefaultHttpClient().execute(httpRequst);//其中HttpGet是HttpUriRequst的子类??
  14. ????????????if(httpResponse.getStatusLine().getStatusCode()?==?200)??
  15. ????????????{??
  16. ????????????????HttpEntity?httpEntity?=?httpResponse.getEntity();??
  17. ????????????????result?=?EntityUtils.toString(httpEntity);//取出应答字符串??
  18. ????????????//?一般来说都要删除多余的字符???
  19. ????????????????result.replaceAll("\r",?"");//去掉返回结果中的"\r"字符,否则会在结果字符串后面显示一个小方格????
  20. ????????????}??
  21. ???????????????????else???
  22. ????????????????????????httpRequst.abort();??
  23. ???????????}?catch?(ClientProtocolException?e)?{??
  24. ????????????//?TODO?Auto-generated?catch?block??
  25. ????????????e.printStackTrace();??
  26. ????????????result?=?e.getMessage().toString();??
  27. ????????}?catch?(IOException?e)?{??
  28. ????????????//?TODO?Auto-generated?catch?block??
  29. ????????????e.printStackTrace();??
  30. ????????????result?=?e.getMessage().toString();??
  31. ????????}??
  32. ????????return?result;??
  33. ????}??

?

?

?????????????? HttpPost

????????????? 如果使用HttpPost方法提交HTTP?POST请求,则需要使用HttpPost类的setEntity方法设置请求参数。参数则必须用NameValuePair[]数组存储。

?

[java]?view plaincopy
?
  1. public?String?doPost()??
  2. ????{??
  3. ????????String?uriAPI?=?"http://XXXXXX";//Post方式没有参数在这里??
  4. ????????String?result?=?"";??
  5. ????????HttpPost?httpRequst?=?new?HttpPost(uriAPI);//创建HttpPost对象??
  6. ??????????
  7. ????????List?<NameValuePair>?params?=?new?ArrayList<NameValuePair>();??
  8. ????????params.add(new?BasicNameValuePair("str",?"I?am?Post?String"));??
  9. ??????????
  10. ????????try?{??
  11. ????????????httpRequst.setEntity(new?UrlEncodedFormEntity(params,HTTP.UTF_8));??
  12. ????????????HttpResponse?httpResponse?=?new?DefaultHttpClient().execute(httpRequst);??
  13. ????????????if(httpResponse.getStatusLine().getStatusCode()?==?200)??
  14. ????????????{??
  15. ????????????????HttpEntity?httpEntity?=?httpResponse.getEntity();??
  16. ????????????????result?=?EntityUtils.toString(httpEntity);//取出应答字符串??
  17. ????????????}??
  18. ????????}?catch?(UnsupportedEncodingException?e)?{??
  19. ????????????//?TODO?Auto-generated?catch?block??
  20. ????????????e.printStackTrace();??
  21. ????????????result?=?e.getMessage().toString();??
  22. ????????}??
  23. ????????catch?(ClientProtocolException?e)?{??
  24. ????????????//?TODO?Auto-generated?catch?block??
  25. ????????????e.printStackTrace();??
  26. ????????????result?=?e.getMessage().toString();??
  27. ????????}??
  28. ????????catch?(IOException?e)?{??
  29. ????????????//?TODO?Auto-generated?catch?block??
  30. ????????????e.printStackTrace();??
  31. ????????????result?=?e.getMessage().toString();??
  32. ????????}??
  33. ????????return?result;??
  34. ????}??



?

????????? 以发送连接请求时,需要设置链接超时和请求超时等参数,否则会长期停止或者崩溃。

?

[java]?view plaincopy
?
  1. HttpParams?httpParameters?=?new?BasicHttpParams();??
  2. HttpConnectionParams.setConnectionTimeout(httpParameters,?10*1000);//设置请求超时10秒??
  3. HttpConnectionParams.setSoTimeout(httpParameters,?10*1000);?//设置等待数据超时10秒??
  4. HttpConnectionParams.setSocketBufferSize(params,?8192);??
  5. HttpClient?httpclient?=?new?DefaultHttpClient(httpParameters);?//此时构造DefaultHttpClient时将参数传入??
  6. ??
  7. ??
  8. ??
  9. 由于是联网,在AndroidManifest.xml中添加网络连接的权限??
  10. <uses-permission?android:name="android.permission.INTERNET"/>??

转自?http://blog.csdn.net/caesardadi/article/details/8621595

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。