标签:
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对象进行操作。
1 封装HttpClientHelper工具类: 2 public class HttpClientHelper { 3 public static HttpClient checkNetwork(String url) { 4 HttpClient httpClient = new DefaultHttpClient(); 5 HttpGet request = new HttpGet(url); 6 HttpResponse httpResponse = null; 7 try { 8 httpResponse = httpClient.execute(request); 9 if (httpResponse.getStatusLine().getStatusCode() == 200) { 10 return httpClient; 11 }} 12 catch (ClientProtocolException e) { 13 e.printStackTrace(); 14 } catch (IOException e) { 15 e.printStackTrace(); 16 }r 17 eturn null; 18 } / 19 ** 20 * 作用: 实现网络访问文件, 将获取到数据储存在文件流中 21 ** 22 @param url 23 * : 访问网络的url地址 24 * @return inputstream 25 */ 26 public static InputStream loadFileFromURL(String url) { 27 HttpClient httpClient = new DefaultHttpClient(); 28 HttpGet requestGet = new HttpGet(url); 29 HttpResponse httpResponse; 30 try { 31 httpResponse = httpClient.execute(requestGet); 32 if (httpResponse.getStatusLine().getStatusCode() == 200) { 33 HttpEntity entity = httpResponse.getEntity(); 34 return entity.getContent(); 35 }} 36 catch (Exception e) { 37 e.printStackTrace(); 38 }r 39 eturn null; 40 } / 41 ** 42 * 作用: 实现网络访问文件, 将获取到的数据存在字节数组中 43 * 作用: 实现网络访问文件, 将获取到的数据存在字节数组中 44 ** 45 @param url 46 * : 访问网络的url地址 47 * @return byte[] 48 */ 49 public static byte[] loadByteFromURL(String url) { 50 HttpClient httpClient = new DefaultHttpClient(); 51 HttpGet requestGet = new HttpGet(url); 52 try { 53 HttpResponse httpResponse = httpClient.execute(requestGet); 54 if (httpResponse.getStatusLine().getStatusCode() == 200) { 55 HttpEntity httpEntity = httpResponse.getEntity(); 56 return EntityUtils.toByteArray(httpEntity); 57 }} 58 catch (Exception e) { 59 e.printStackTrace(); 60 System.out.println("====>" + e.toString()); 61 }r 62 eturn null; 63 } / 64 ** 65 * 作用: 实现网络访问文件, 返回字符串 66 ** 67 @param url 68 * : 访问网络的url地址 69 * @return String 70 */ 71 public static String loadTextFromURL(String url) { 72 HttpClient httpClient = new DefaultHttpClient(); 73 HttpGet requestGet = new HttpGet(url); 74 try { 75 HttpResponse httpResponse = httpClient.execute(requestGet); 76 if (httpResponse.getStatusLine().getStatusCode() == 200) { 77 HttpEntity httpEntity = httpResponse.getEntity(); 78 return EntityUtils.toString(httpEntity, "utf-8"); 79 }} 80 catch (Exception e) { 81 e.printStackTrace(); 82 }r 83 eturn null; 84 } / 85 ** 86 * 作用: 实现网络访问文件, 先给服务器通过“GET”方式提交数据, 再返回相应的数据 87 ** 88 @param url 89 * : 访问网络的url地址 90 * @param params 91 * String url: 访问url时, 需要传递给服务器的参数。 92 * 第二个参数格式为: username=wangxiangjun&password=123456 93 * @return byte[] 94 */ 95 public static byte[] doGetSubmit(String url, String params) { 96 HttpClient httpClient = new DefaultHttpClient(); 97 HttpGet requestGet = new HttpGet(url + "?" + params); 98 try { 99 HttpResponse httpResponse = httpClient.execute(requestGet); 100 if (httpResponse.getStatusLine().getStatusCode() == 200) { 101 HttpEntity httpEntity = httpResponse.getEntity(); 102 return EntityUtils.toByteArray(httpEntity); 103 }} 104 catch (Exception e) { 105 e.printStackTrace(); 106 }r 107 eturn null; 108 } / 109 ** 110 * 作用: 实现网络访问文件, 先给服务器通过“POST”方式提交数据, 再返回相应的数据 111 ** 112 @param url 113 * : 访问网络的url地址 114 * @param params 115 * String url: 访问url时, 需要传递给服务器的参数。 第二个参数为: List<NameValuePair> 116 * @return byte[] 117 */ 118 public static byte[] doPostSubmit(String url, List<NameValuePair> params) { 119 HttpClient httpClient = new DefaultHttpClient(); 120 HttpPost requestPost = new HttpPost(url); 121 try { 122 requestPost.setEntity(new UrlEncodedFormEntity(params, "utf-8")); 123 HttpResponse httpResponse = httpClient.execute(requestPost); 124 if (httpResponse.getStatusLine().getStatusCode() == 200) { 125 HttpEntity httpEntity = httpResponse.getEntity(); 126 return EntityUtils.toByteArray(httpEntity); 127 }} 128 catch (Exception e) { 129 e.printStackTrace(); 130 }r 131 eturn null; 132 } / 133 ** 134 * 作用: 实现网络访问文件, 先给服务器通过“POST”方式提交数据, 再返回相应的数据 135 ** 136 @param url 137 * : 访问网络的url地址 138 * @param params 139 * String url: 访问url时, 需要传递给服务器的参数。 Map<String , Object> 140 * @return byte[] 141 */ 142 public static byte[] doPostSubmit(String url, Map<String, Object> params) { 143 HttpClient httpClient = new DefaultHttpClient(); 144 HttpPost requestPost = new HttpPost(url); 145 List<BasicNameValuePair> parameters = new ArrayList<BasicNameValuePair>(); 146 try { 147 if (params != null) { 148 for (Map.Entry<String, Object> entry : params.entrySet()) { 149 String key = entry.getKey(); 150 String value = entry.getValue().toString(); 151 BasicNameValuePair nameValuePair = new BasicNameValuePair( 152 key, value); 153 parameters.add(nameValuePair); 154 }}r 155 equestPost 156 .setEntity(new UrlEncodedFormEntity(parameters, "utf-8")); 157 HttpResponse httpResponse = httpClient.execute(requestPost); 158 if (httpResponse.getStatusLine().getStatusCode() == 200) { 159 HttpEntity httpEntity = httpResponse.getEntity(); 160 return EntityUtils.toByteArray(httpEntity); 161 }} 162 catch (Exception e) { 163 e.printStackTrace(); 164 }r 165 eturn null; 166 }}
标签:
原文地址:http://www.cnblogs.com/tjmyhx/p/4535864.html