首页 > 其他分享 >Android----http请求工具类(转)

Android----http请求工具类(转)

时间:2023-05-10 10:32:45浏览次数:45  
标签:http 请求 new ---- org apache import Android


项目中客户端与服务器端采用http请求进行交互,在这里我把http请求的工具类贴出来。

该工具类采用的是HttpClients框架,HTTP保存方式有两种选择 :一种:整个应用 只创建 一个HttpClient对象,然后保存在整个程序中去。此情况无法创建多线程中应用。
另一种:随时创建HttpClient对象。系统自动保存Session就行。此情况可能对系统资源消耗利害
 用完之后请随时销毁HttpClient,避免系统中存在很多HttpClient对象。在这里我采用的是第二种。

包含两个java文件,第一个是主要的请求工具类文件,第二个主要是保存请求的session,下面见代码:



1. package com.hlj.padtwo.util.util_public.httputil;  
2.   
3.   
4.   
5. import java.io.File;  
6. import java.io.IOException;  
7. import java.io.InputStream;  
8. import java.net.URLEncoder;  
9. import java.nio.charset.Charset;  
10. import java.util.ArrayList;  
11. import java.util.HashMap;  
12. import java.util.Iterator;  
13. import java.util.List;  
14. import java.util.Map;  
15.   
16. import javax.net.ssl.SSLHandshakeException;  
17.   
18. import org.apache.http.Header;  
19. import org.apache.http.HttpEntityEnclosingRequest;  
20. import org.apache.http.HttpHost;  
21. import org.apache.http.HttpRequest;  
22. import org.apache.http.HttpResponse;  
23. import org.apache.http.NameValuePair;  
24. import org.apache.http.NoHttpResponseException;  
25. import org.apache.http.client.ClientProtocolException;  
26. import org.apache.http.client.CookieStore;  
27. import org.apache.http.client.HttpRequestRetryHandler;  
28. import org.apache.http.client.entity.UrlEncodedFormEntity;  
29. import org.apache.http.client.methods.HttpGet;  
30. import org.apache.http.client.methods.HttpPost;  
31. import org.apache.http.client.params.HttpClientParams;  
32. import org.apache.http.conn.params.ConnRouteParams;  
33. import org.apache.http.entity.mime.HttpMultipartMode;  
34. import org.apache.http.entity.mime.MultipartEntity;  
35. import org.apache.http.entity.mime.content.ContentBody;  
36. import org.apache.http.entity.mime.content.FileBody;  
37. import org.apache.http.entity.mime.content.StringBody;  
38. import org.apache.http.impl.client.DefaultHttpClient;  
39. import org.apache.http.params.BasicHttpParams;  
40. import org.apache.http.params.HttpConnectionParams;  
41. import org.apache.http.params.HttpParams;  
42. import org.apache.http.protocol.ExecutionContext;  
43. import org.apache.http.protocol.HTTP;  
44. import org.apache.http.protocol.HttpContext;  
45. import org.apache.http.util.EntityUtils;  
46.   
47. import android.app.Activity;  
48. import android.content.Context;  
49. import android.widget.Toast;  
50.   
51. import com.hlj.padtwo.util.application.MyApplication;  
52.   
53.   
54. /***
55.  * Http通信中的POST和GET请求方式的不同。GET把参数放在URL字符串后面,传递给服务器。
56.  * 而POST方法的参数是放在Http请求中,主要用于手机对Http访问提供公共的访问类对象。
57.  * @author hlj
58.  * @date
59.  * @versionn 1.0
60.  **/  
61. public class HttpClients {  
62. /** 执行downfile后,得到下载文件的大小 */  
63. private long contentLength;  
64. /** 返回连接失败信息 **/  
65. private String strResult = "服务器无法连接,请检查网络";  
66.   
67. /** http 请求头参数 **/  
68. private HttpParams httpParams;  
69. /** httpClient 对象 **/  
70. private DefaultHttpClient httpClient;  
71.   
72.   
73. /** 得到上下文 **/  
74. private Context context;  
75. private Activity activity = null;  
76.   
77. public HttpClients(Activity act) {  
78. this.context = act.getBaseContext();  
79. this.activity = act;  
80.         getHttpClient();  
81.     }  
82.   
83. /**
84.      * 提供GET形式的访问网络请求 doGet 参数示例: Map params=new HashMap();
85.      * params.put("usename","helijun"); params.put("password","123456");
86.      * httpClient.doGet(url,params);
87.      * 
88.      * @param url
89.      *            请求地址
90.      * @param params
91.      *            请求参数
92.      * @return 返回 String jsonResult;
93.      * 
94.      * **/  
95. "unchecked")  
96. public String doGet(String url, Map params) {  
97. /** 建立HTTPGet对象 **/  
98. "";  
99. if (params == null)  
100. new HashMap();  
101. /** 迭代请求参数集合 **/  
102.         Iterator iter = params.entrySet().iterator();  
103. while (iter.hasNext()) {  
104.             Map.Entry entry = (Map.Entry) iter.next();  
105.             Object key = entry.getKey();  
106.             String val = nullToString(entry.getValue());  
107. "&" + key + "=" + URLEncoder.encode(val);  
108.         }  
109. if (!paramStr.equals("")) {  
110. "&", "?");  
111.             url += paramStr;  
112.         }  
113. return doGet(url);  
114.     }  
115.   
116. /**
117.      * 提供GET形式的访问网络请求 doGet 参数示例: Map params=new HashMap();
118.      * params.put("usename","gongshuanglin"); params.put("password","123456");
119.      * httpClient.doGet(url,params);
120.      * 
121.      * @param url
122.      *            请求地址
123.      * @param params
124.      *            请求参数
125.      * @return 返回 String jsonResult;
126.      * 
127.      */  
128. public String doGet(String url, List<NameValuePair> params) {  
129. /** 建立HTTPGet对象 **/  
130. "";  
131. if (params == null)  
132. new ArrayList<NameValuePair>();  
133. /** 迭代请求参数集合 **/  
134.   
135. for (NameValuePair obj : params) {  
136. "&" + obj.getName() + "="  
137.                     + URLEncoder.encode(obj.getValue());  
138.         }  
139. if (!paramStr.equals("")) {  
140. "&", "?");  
141.             url += paramStr;  
142.         }  
143. return doGet(url);  
144.     }  
145.   
146. /**
147.      * 提供GET形式的访问网络请求 doGet 参数示例:
148.      * 
149.      * @param url
150.      *            请求地址
151.      * @return 返回 String jsonResult;
152.      * 
153.      */  
154. public String doGet(String url) {  
155. /** 创建HttpGet对象 **/  
156. new HttpGet(url);  
157. this.getHeader());  
158. try {  
159. /** 保持会话Session **/  
160. /** 设置Cookie **/  
161. new MyHttpCookies(context);  
162.             CookieStore cs = li.getuCookie();  
163. /** 第一次请求App保存的Cookie为空,所以什么也不做,只有当APP的Cookie不为空的时。把请请求的Cooke放进去 **/  
164. if (cs != null) {  
165.                 httpClient.setCookieStore(li.getuCookie());  
166.             }  
167.   
168. /** 保持会话Session end **/  
169.   
170. /* 发送请求并等待响应 */  
171.             HttpResponse httpResponse = httpClient.execute(httpRequest);  
172. /* 若状态码为200 ok */  
173. if (httpResponse.getStatusLine().getStatusCode() == 200) {  
174. /* 读返回数据 */  
175.                 strResult = EntityUtils.toString(httpResponse.getEntity());  
176.   
177. /** 执行成功之后得到 **/  
178. /** 成功之后把返回成功的Cookis保存APP中 **/  
179. // 请求成功之后,每次都设置Cookis。保证每次请求都是最新的Cookis  
180.                 li.setuCookie(httpClient.getCookieStore());  
181.   
182. else {  
183. "Error Response: "  
184.                         + httpResponse.getStatusLine().toString();  
185.             }  
186. catch (ClientProtocolException e) {  
187.             strResult = nullToString(e.getMessage());  
188.             e.printStackTrace();  
189. catch (IOException e) {  
190.             strResult = nullToString(e.getMessage());  
191.             e.printStackTrace();  
192. catch (Exception e) {  
193.             strResult = nullToString(e.getMessage());  
194.             e.printStackTrace();  
195.         } finally {  
196.             httpRequest.abort();  
197. this.shutDownClient();  
198.         }  
199. return strResult;  
200.     }  
201.   
202. /**
203.      * 提供Post形式的访问网络请求 Post 参数示例: doPost 参数示例 List<NameValuePair> paramlist =
204.      * new ArrayList<NameValuePair>(); paramlist(new BasicNameValuePair("email",
205.      * "[email protected]")); paramlist(new BasicNameValuePair("address", "123abc"));
206.      * httpClient.doPost(url,paramlist);
207.      * 
208.      * @param url
209.      *            请求地址
210.      * @param params
211.      *            请求参数
212.      * @return 返回 String jsonResult;
213.      * **/  
214.   
215. public String doPost(String url, List<NameValuePair> params) {  
216. /* 建立HTTPPost对象 */  
217.   
218. new HttpPost(url);  
219. // 设置请求Header信息、  
220. this.getHeader());  
221. try {  
222. /** 添加请求参数到请求对象 */  
223. //          boolean upFileFlag = false;// 是否有文件上传  
224. //          MultipartEntity mpEntity = new MultipartEntity(  
225. //                  HttpMultipartMode.BROWSER_COMPATIBLE);  
226. //          for (NameValuePair param : params) {  
227. //              ContentBody contentBody = null;  
228. //              File file = new File(param.getValue());  
229. //              if (file.isFile()) {  
230. //                  contentBody = new FileBody(file);  
231. //                  upFileFlag = true;  
232. //              } else {  
233. //                  contentBody = new StringBody(param.getValue(), Charset  
234. //                          .forName(HTTP.UTF_8));  
235. //              }  
236. //              mpEntity.addPart(param.getName(), contentBody);  
237. //          }  
238. //  
239. //          if (upFileFlag == true) {// 文件 上传  
240. //              httpRequest.setEntity(mpEntity);  
241. //          } else {  
242. /** 添加请求参数到请求对象 */  
243. new UrlEncodedFormEntity(params,  
244.                         HTTP.UTF_8));  
245. //          }  
246.   
247. /** 保持会话Session **/  
248. /** 设置Cookie **/  
249. new MyHttpCookies(context);  
250.             CookieStore cs = li.getuCookie();  
251. /** 第一次请求App保存的Cookie为空,所以什么也不做,只有当APP的Cookie不为空的时。把请请求的Cooke放进去 **/  
252. if (cs != null) {  
253.                 httpClient.setCookieStore(li.getuCookie());  
254.             }  
255.   
256. /** 保持会话Session end **/  
257.   
258. /** 发送请求并等待响应 */  
259.   
260.             HttpResponse httpResponse = httpClient.execute(httpRequest);  
261.               
262. /** 若状态码为200 ok */  
263. if (httpResponse.getStatusLine().getStatusCode() == 200) {  
264. /* 读返回数据 */  
265.                 strResult = EntityUtils.toString(httpResponse.getEntity());  
266.   
267. /** 执行成功之后得到 **/  
268. /** 成功之后把返回成功的Cookis保存APP中 **/  
269. // 请求成功之后,每次都设置Cookis。保证每次请求都是最新的Cookis  
270.                 li.setuCookie(httpClient.getCookieStore());  
271.   
272. /** 设置Cookie end **/  
273. else {  
274. "Error Response: "  
275.                         + httpResponse.getStatusLine().toString();  
276.             }  
277. catch (ClientProtocolException e) {  
278. "";  
279. //          strResult = e.getMessage().toString();  
280.             e.printStackTrace();  
281. catch (IOException e) {  
282. "";  
283. //          strResult = e.getMessage().toString();  
284.             e.printStackTrace();  
285. catch (Exception e) {  
286. "";  
287. //          strResult = e.getMessage().toString();  
288.             e.printStackTrace();  
289.         } finally {  
290.             httpRequest.abort();  
291. this.shutDownClient();  
292.         }  
293. return strResult;  
294.     }  
295.   
296. /** 得到 apache http HttpClient对象 **/  
297. public DefaultHttpClient getHttpClient() {  
298.   
299. /** 创建 HttpParams 以用来设置 HTTP 参数 **/  
300.   
301. new BasicHttpParams();  
302.   
303. /** 设置连接超时和 Socket 超时,以及 Socket 缓存大小 **/  
304.   
305.         HttpConnectionParams.setConnectionTimeout(httpParams, 20 * 1000);  
306.   
307.         HttpConnectionParams.setSoTimeout(httpParams, 20 * 1000);  
308.   
309.         HttpConnectionParams.setSocketBufferSize(httpParams, 8192);  
310.   
311. true);  
312.   
313. /**
314.          * 创建一个 HttpClient 实例 //增加自动选择网络,自适应cmwap、CMNET、wifi或3G
315.          */  
316. new MyHttpCookies(context);  
317.         String proxyStr = li.getHttpProxyStr();  
318. if (proxyStr != null && proxyStr.trim().length() > 0) {  
319. new HttpHost(proxyStr, 80);  
320.             httpClient.getParams().setParameter(ConnRouteParams.DEFAULT_PROXY,  
321.                     proxy);  
322.         }  
323. /** 注意 HttpClient httpClient = new HttpClient(); 是Commons HttpClient **/  
324.   
325. new DefaultHttpClient(httpParams);  
326.         httpClient.setHttpRequestRetryHandler(requestRetryHandler);  
327.           
328. return httpClient;  
329.   
330.     }  
331.   
332. /** 得到设备信息、系统版本、驱动类型 **/  
333. private Header[] getHeader() {  
334. /** 请求头信息 end **/  
335. new MyHttpCookies(context);  
336. return li.getHttpHeader();  
337.     }  
338.   
339. /** 销毁HTTPCLient **/  
340. public void shutDownClient() {  
341.         httpClient.getConnectionManager().shutdown();  
342.     }  
343.   
344. //  /**  
345. //   * 提供GET形式的访问网络请求 doGet 参数示例:  
346. //   *   
347. //   * @param url  
348. //   *            请求地址  
349. //   * @return 返回 String jsonResult;  
350. //   *   
351. //   */  
352. //  public InputStream doDownFile(String url) {  
353. //      /** 创建HttpGet对象 **/  
354. //      HttpGet httpRequest = new HttpGet(url);  
355. //      httpRequest.setHeaders(this.getHeader());  
356. //      try {  
357. //          /** 保持会话Session **/  
358. //          /** 设置Cookie **/  
359. //          MyHttpCookies li = new MyHttpCookies(context);  
360. //          CookieStore cs = li.getuCookie();  
361. //          /** 第一次请求App保存的Cookie为空,所以什么也不做,只有当APP的Cookie不为空的时。把请请求的Cooke放进去 **/  
362. //          if (cs != null) {  
363. //              httpClient.setCookieStore(li.getuCookie());  
364. //          }  
365. //          /** 保持会话Session end **/  
366. //          /* 发送请求并等待响应 */  
367. //          HttpResponse httpResponse = httpClient.execute(httpRequest);  
368. //          /* 若状态码为200 ok */  
369. //          if (httpResponse.getStatusLine().getStatusCode() == 200) {  
370. //              /** 执行成功之后得到 **/  
371. //              /** 成功之后把返回成功的Cookis保存APP中 **/  
372. //              // 请求成功之后,每次都设置Cookis。保证每次请求都是最新的Cookis  
373. //              li.setuCookie(httpClient.getCookieStore());  
374. //              this.contentLength = httpResponse.getEntity()  
375. //                      .getContentLength();  
376. //              /* 读返回数据 */  
377. //              return httpResponse.getEntity().getContent();  
378. //          } else {  
379. //              strResult = "Error Response: "  
380. //                      + httpResponse.getStatusLine().toString();  
381. //          }  
382. //      } catch (ClientProtocolException e) {  
383. //          strResult = e.getMessage().toString();  
384. //          e.printStackTrace();  
385. //      } catch (IOException e) {  
386. //          strResult = e.getMessage().toString();  
387. //          e.printStackTrace();  
388. //      } catch (Exception e) {  
389. //          strResult = e.getMessage().toString();  
390. //          e.printStackTrace();  
391. //      } finally {  
392. //          // httpRequest.abort();  
393. //          // this.shutDownClient();  
394. //      }  
395. //      this.contentLength = 0;  
396. //      return null;  
397. //  }  
398.   
399. /**
400.      * 异常自动恢复处理, 使用HttpRequestRetryHandler接口实现请求的异常恢复
401.      */  
402. private static HttpRequestRetryHandler requestRetryHandler = new HttpRequestRetryHandler() {  
403. // 自定义的恢复策略  
404. public boolean retryRequest(IOException exception, int executionCount,  
405.                 HttpContext context) {  
406. // 设置恢复策略,在发生异常时候将自动重试N次  
407. if (executionCount >= 3) {  
408. // 如果超过最大重试次数,那么就不要继续了  
409. return false;  
410.             }  
411. if (exception instanceof NoHttpResponseException) {  
412. // 如果服务器丢掉了连接,那么就重试  
413. return true;  
414.             }  
415. if (exception instanceof SSLHandshakeException) {  
416. // 不要重试SSL握手异常  
417. return false;  
418.             }  
419.             HttpRequest request = (HttpRequest) context  
420.                     .getAttribute(ExecutionContext.HTTP_REQUEST);  
421.             boolean idempotent = (request instanceof HttpEntityEnclosingRequest);  
422. if (!idempotent) {  
423. // 如果请求被认为是幂等的,那么就重试  
424. return true;  
425.             }  
426. return false;  
427.         }  
428.     };  
429.   
430. public long getContentLength() {  
431. return contentLength;  
432.     }  
433.   
434. /**
435.      * 假如obj对象 是null返回""
436.      * @param obj
437.      * @return
438.      */  
439. public static String nullToString(Object obj){  
440. if(obj==null){  
441. return "";  
442.         }  
443. return obj.toString();  
444.     }  
445. }

 


1. package com.hlj.padtwo.util.util_public.httputil;  
2.   
3.   
4.   
5. import org.apache.http.Header;  
6. import org.apache.http.client.CookieStore;  
7. import org.apache.http.message.BasicHeader;  
8.   
9. import android.content.Context;  
10. import android.database.Cursor;  
11. import android.net.Uri;  
12. import android.net.wifi.WifiManager;  
13.   
14. /**
15.  * http请求的缓存和一些公用的参数
16.  * @author helijun
17.  *
18.  */  
19. public class MyHttpCookies {  
20. /** 每页数据显示最大数 */  
21. private static int pageSize = 10;  
22. /** 当前会话后的cokie信息 */  
23. private static CookieStore uCookie = null;  
24. /** 公用的HTTP提示头信息 */  
25. private static Header[] httpHeader;  
26. /** HTTP连接的网络节点 */  
27. private static String httpProxyStr;  
28. /**http请求的公用url部分**/  
29. public static String baseurl = "http://192.168.50.56:5056/River";  
30. /**上下文对象**/  
31.     Context context;  
32.       
33. public MyHttpCookies(Context context){  
34. this.context = context;  
35. /** y设置请求头 **/  
36. /** y设置请求头 **/  
37.         Header[] header = {  
38. new BasicHeader("PagingRows", String.valueOf(pageSize)) };  
39.         httpHeader = header;  
40.     }  
41.       
42. /**
43.      * 增加自动选择网络,自适应cmwap、CMNET、wifi或3G
44.      */  
45. "static-access")  
46. public void initHTTPProxy() {  
47.         WifiManager wifiManager = (WifiManager) (context.getSystemService(context.WIFI_SERVICE));  
48. if (!wifiManager.isWifiEnabled()) {  
49. "content://telephony/carriers/preferapn"); // 获取当前正在使用的APN接入点  
50.             Cursor mCursor =context. getContentResolver().query(uri, null, null, null,  
51.                     null);  
52. if (mCursor != null) {  
53. // 游标移至第一条记录,当然也只有一条  
54.                 httpProxyStr = mCursor.getString(mCursor  
55. "proxy"));  
56.             }  
57. else {  
58.             httpProxyStr = null;  
59.         }  
60.     }  
61.       
62. public int getPageSize() {  
63. return pageSize;  
64.     }  
65.   
66. public void setPageSize(int pageSize) {  
67. this.pageSize = pageSize;  
68.     }  
69.   
70. public CookieStore getuCookie() {  
71. return uCookie;  
72.     }  
73.   
74. public void setuCookie(CookieStore uCookie) {  
75. this.uCookie = uCookie;  
76.     }  
77.   
78.   
79. public Header[] getHttpHeader() {  
80. return httpHeader;  
81.     }  
82.   
83. public String getHttpProxyStr() {  
84. return httpProxyStr;  
85.     }  
86. }


项目中客户端与服务器端采用http请求进行交互,在这里我把http请求的工具类贴出来。

该工具类采用的是HttpClients框架,HTTP保存方式有两种选择 :一种:整个应用 只创建 一个HttpClient对象,然后保存在整个程序中去。此情况无法创建多线程中应用。
另一种:随时创建HttpClient对象。系统自动保存Session就行。此情况可能对系统资源消耗利害
 用完之后请随时销毁HttpClient,避免系统中存在很多HttpClient对象。在这里我采用的是第二种。

包含两个java文件,第一个是主要的请求工具类文件,第二个主要是保存请求的session,下面见代码:




1. package com.hlj.padtwo.util.util_public.httputil;  
2.   
3.   
4.   
5. import java.io.File;  
6. import java.io.IOException;  
7. import java.io.InputStream;  
8. import java.net.URLEncoder;  
9. import java.nio.charset.Charset;  
10. import java.util.ArrayList;  
11. import java.util.HashMap;  
12. import java.util.Iterator;  
13. import java.util.List;  
14. import java.util.Map;  
15.   
16. import javax.net.ssl.SSLHandshakeException;  
17.   
18. import org.apache.http.Header;  
19. import org.apache.http.HttpEntityEnclosingRequest;  
20. import org.apache.http.HttpHost;  
21. import org.apache.http.HttpRequest;  
22. import org.apache.http.HttpResponse;  
23. import org.apache.http.NameValuePair;  
24. import org.apache.http.NoHttpResponseException;  
25. import org.apache.http.client.ClientProtocolException;  
26. import org.apache.http.client.CookieStore;  
27. import org.apache.http.client.HttpRequestRetryHandler;  
28. import org.apache.http.client.entity.UrlEncodedFormEntity;  
29. import org.apache.http.client.methods.HttpGet;  
30. import org.apache.http.client.methods.HttpPost;  
31. import org.apache.http.client.params.HttpClientParams;  
32. import org.apache.http.conn.params.ConnRouteParams;  
33. import org.apache.http.entity.mime.HttpMultipartMode;  
34. import org.apache.http.entity.mime.MultipartEntity;  
35. import org.apache.http.entity.mime.content.ContentBody;  
36. import org.apache.http.entity.mime.content.FileBody;  
37. import org.apache.http.entity.mime.content.StringBody;  
38. import org.apache.http.impl.client.DefaultHttpClient;  
39. import org.apache.http.params.BasicHttpParams;  
40. import org.apache.http.params.HttpConnectionParams;  
41. import org.apache.http.params.HttpParams;  
42. import org.apache.http.protocol.ExecutionContext;  
43. import org.apache.http.protocol.HTTP;  
44. import org.apache.http.protocol.HttpContext;  
45. import org.apache.http.util.EntityUtils;  
46.   
47. import android.app.Activity;  
48. import android.content.Context;  
49. import android.widget.Toast;  
50.   
51. import com.hlj.padtwo.util.application.MyApplication;  
52.   
53.   
54. /***
55.  * Http通信中的POST和GET请求方式的不同。GET把参数放在URL字符串后面,传递给服务器。
56.  * 而POST方法的参数是放在Http请求中,主要用于手机对Http访问提供公共的访问类对象。
57.  * @author hlj
58.  * @date
59.  * @versionn 1.0
60.  **/  
61. public class HttpClients {  
62. /** 执行downfile后,得到下载文件的大小 */  
63. private long contentLength;  
64. /** 返回连接失败信息 **/  
65. private String strResult = "服务器无法连接,请检查网络";  
66.   
67. /** http 请求头参数 **/  
68. private HttpParams httpParams;  
69. /** httpClient 对象 **/  
70. private DefaultHttpClient httpClient;  
71.   
72.   
73. /** 得到上下文 **/  
74. private Context context;  
75. private Activity activity = null;  
76.   
77. public HttpClients(Activity act) {  
78. this.context = act.getBaseContext();  
79. this.activity = act;  
80.         getHttpClient();  
81.     }  
82.   
83. /**
84.      * 提供GET形式的访问网络请求 doGet 参数示例: Map params=new HashMap();
85.      * params.put("usename","helijun"); params.put("password","123456");
86.      * httpClient.doGet(url,params);
87.      * 
88.      * @param url
89.      *            请求地址
90.      * @param params
91.      *            请求参数
92.      * @return 返回 String jsonResult;
93.      * 
94.      * **/  
95. "unchecked")  
96. public String doGet(String url, Map params) {  
97. /** 建立HTTPGet对象 **/  
98. "";  
99. if (params == null)  
100. new HashMap();  
101. /** 迭代请求参数集合 **/  
102.         Iterator iter = params.entrySet().iterator();  
103. while (iter.hasNext()) {  
104.             Map.Entry entry = (Map.Entry) iter.next();  
105.             Object key = entry.getKey();  
106.             String val = nullToString(entry.getValue());  
107. "&" + key + "=" + URLEncoder.encode(val);  
108.         }  
109. if (!paramStr.equals("")) {  
110. "&", "?");  
111.             url += paramStr;  
112.         }  
113. return doGet(url);  
114.     }  
115.   
116. /**
117.      * 提供GET形式的访问网络请求 doGet 参数示例: Map params=new HashMap();
118.      * params.put("usename","gongshuanglin"); params.put("password","123456");
119.      * httpClient.doGet(url,params);
120.      * 
121.      * @param url
122.      *            请求地址
123.      * @param params
124.      *            请求参数
125.      * @return 返回 String jsonResult;
126.      * 
127.      */  
128. public String doGet(String url, List<NameValuePair> params) {  
129. /** 建立HTTPGet对象 **/  
130. "";  
131. if (params == null)  
132. new ArrayList<NameValuePair>();  
133. /** 迭代请求参数集合 **/  
134.   
135. for (NameValuePair obj : params) {  
136. "&" + obj.getName() + "="  
137.                     + URLEncoder.encode(obj.getValue());  
138.         }  
139. if (!paramStr.equals("")) {  
140. "&", "?");  
141.             url += paramStr;  
142.         }  
143. return doGet(url);  
144.     }  
145.   
146. /**
147.      * 提供GET形式的访问网络请求 doGet 参数示例:
148.      * 
149.      * @param url
150.      *            请求地址
151.      * @return 返回 String jsonResult;
152.      * 
153.      */  
154. public String doGet(String url) {  
155. /** 创建HttpGet对象 **/  
156. new HttpGet(url);  
157. this.getHeader());  
158. try {  
159. /** 保持会话Session **/  
160. /** 设置Cookie **/  
161. new MyHttpCookies(context);  
162.             CookieStore cs = li.getuCookie();  
163. /** 第一次请求App保存的Cookie为空,所以什么也不做,只有当APP的Cookie不为空的时。把请请求的Cooke放进去 **/  
164. if (cs != null) {  
165.                 httpClient.setCookieStore(li.getuCookie());  
166.             }  
167.   
168. /** 保持会话Session end **/  
169.   
170. /* 发送请求并等待响应 */  
171.             HttpResponse httpResponse = httpClient.execute(httpRequest);  
172. /* 若状态码为200 ok */  
173. if (httpResponse.getStatusLine().getStatusCode() == 200) {  
174. /* 读返回数据 */  
175.                 strResult = EntityUtils.toString(httpResponse.getEntity());  
176.   
177. /** 执行成功之后得到 **/  
178. /** 成功之后把返回成功的Cookis保存APP中 **/  
179. // 请求成功之后,每次都设置Cookis。保证每次请求都是最新的Cookis  
180.                 li.setuCookie(httpClient.getCookieStore());  
181.   
182. else {  
183. "Error Response: "  
184.                         + httpResponse.getStatusLine().toString();  
185.             }  
186. catch (ClientProtocolException e) {  
187.             strResult = nullToString(e.getMessage());  
188.             e.printStackTrace();  
189. catch (IOException e) {  
190.             strResult = nullToString(e.getMessage());  
191.             e.printStackTrace();  
192. catch (Exception e) {  
193.             strResult = nullToString(e.getMessage());  
194.             e.printStackTrace();  
195.         } finally {  
196.             httpRequest.abort();  
197. this.shutDownClient();  
198.         }  
199. return strResult;  
200.     }  
201.   
202. /**
203.      * 提供Post形式的访问网络请求 Post 参数示例: doPost 参数示例 List<NameValuePair> paramlist =
204.      * new ArrayList<NameValuePair>(); paramlist(new BasicNameValuePair("email",
205.      * "[email protected]")); paramlist(new BasicNameValuePair("address", "123abc"));
206.      * httpClient.doPost(url,paramlist);
207.      * 
208.      * @param url
209.      *            请求地址
210.      * @param params
211.      *            请求参数
212.      * @return 返回 String jsonResult;
213.      * **/  
214.   
215. public String doPost(String url, List<NameValuePair> params) {  
216. /* 建立HTTPPost对象 */  
217.   
218. new HttpPost(url);  
219. // 设置请求Header信息、  
220. this.getHeader());  
221. try {  
222. /** 添加请求参数到请求对象 */  
223. //          boolean upFileFlag = false;// 是否有文件上传  
224. //          MultipartEntity mpEntity = new MultipartEntity(  
225. //                  HttpMultipartMode.BROWSER_COMPATIBLE);  
226. //          for (NameValuePair param : params) {  
227. //              ContentBody contentBody = null;  
228. //              File file = new File(param.getValue());  
229. //              if (file.isFile()) {  
230. //                  contentBody = new FileBody(file);  
231. //                  upFileFlag = true;  
232. //              } else {  
233. //                  contentBody = new StringBody(param.getValue(), Charset  
234. //                          .forName(HTTP.UTF_8));  
235. //              }  
236. //              mpEntity.addPart(param.getName(), contentBody);  
237. //          }  
238. //  
239. //          if (upFileFlag == true) {// 文件 上传  
240. //              httpRequest.setEntity(mpEntity);  
241. //          } else {  
242. /** 添加请求参数到请求对象 */  
243. new UrlEncodedFormEntity(params,  
244.                         HTTP.UTF_8));  
245. //          }  
246.   
247. /** 保持会话Session **/  
248. /** 设置Cookie **/  
249. new MyHttpCookies(context);  
250.             CookieStore cs = li.getuCookie();  
251. /** 第一次请求App保存的Cookie为空,所以什么也不做,只有当APP的Cookie不为空的时。把请请求的Cooke放进去 **/  
252. if (cs != null) {  
253.                 httpClient.setCookieStore(li.getuCookie());  
254.             }  
255.   
256. /** 保持会话Session end **/  
257.   
258. /** 发送请求并等待响应 */  
259.   
260.             HttpResponse httpResponse = httpClient.execute(httpRequest);  
261.               
262. /** 若状态码为200 ok */  
263. if (httpResponse.getStatusLine().getStatusCode() == 200) {  
264. /* 读返回数据 */  
265.                 strResult = EntityUtils.toString(httpResponse.getEntity());  
266.   
267. /** 执行成功之后得到 **/  
268. /** 成功之后把返回成功的Cookis保存APP中 **/  
269. // 请求成功之后,每次都设置Cookis。保证每次请求都是最新的Cookis  
270.                 li.setuCookie(httpClient.getCookieStore());  
271.   
272. /** 设置Cookie end **/  
273. else {  
274. "Error Response: "  
275.                         + httpResponse.getStatusLine().toString();  
276.             }  
277. catch (ClientProtocolException e) {  
278. "";  
279. //          strResult = e.getMessage().toString();  
280.             e.printStackTrace();  
281. catch (IOException e) {  
282. "";  
283. //          strResult = e.getMessage().toString();  
284.             e.printStackTrace();  
285. catch (Exception e) {  
286. "";  
287. //          strResult = e.getMessage().toString();  
288.             e.printStackTrace();  
289.         } finally {  
290.             httpRequest.abort();  
291. this.shutDownClient();  
292.         }  
293. return strResult;  
294.     }  
295.   
296. /** 得到 apache http HttpClient对象 **/  
297. public DefaultHttpClient getHttpClient() {  
298.   
299. /** 创建 HttpParams 以用来设置 HTTP 参数 **/  
300.   
301. new BasicHttpParams();  
302.   
303. /** 设置连接超时和 Socket 超时,以及 Socket 缓存大小 **/  
304.   
305.         HttpConnectionParams.setConnectionTimeout(httpParams, 20 * 1000);  
306.   
307.         HttpConnectionParams.setSoTimeout(httpParams, 20 * 1000);  
308.   
309.         HttpConnectionParams.setSocketBufferSize(httpParams, 8192);  
310.   
311. true);  
312.   
313. /**
314.          * 创建一个 HttpClient 实例 //增加自动选择网络,自适应cmwap、CMNET、wifi或3G
315.          */  
316. new MyHttpCookies(context);  
317.         String proxyStr = li.getHttpProxyStr();  
318. if (proxyStr != null && proxyStr.trim().length() > 0) {  
319. new HttpHost(proxyStr, 80);  
320.             httpClient.getParams().setParameter(ConnRouteParams.DEFAULT_PROXY,  
321.                     proxy);  
322.         }  
323. /** 注意 HttpClient httpClient = new HttpClient(); 是Commons HttpClient **/  
324.   
325. new DefaultHttpClient(httpParams);  
326.         httpClient.setHttpRequestRetryHandler(requestRetryHandler);  
327.           
328. return httpClient;  
329.   
330.     }  
331.   
332. /** 得到设备信息、系统版本、驱动类型 **/  
333. private Header[] getHeader() {  
334. /** 请求头信息 end **/  
335. new MyHttpCookies(context);  
336. return li.getHttpHeader();  
337.     }  
338.   
339. /** 销毁HTTPCLient **/  
340. public void shutDownClient() {  
341.         httpClient.getConnectionManager().shutdown();  
342.     }  
343.   
344. //  /**  
345. //   * 提供GET形式的访问网络请求 doGet 参数示例:  
346. //   *   
347. //   * @param url  
348. //   *            请求地址  
349. //   * @return 返回 String jsonResult;  
350. //   *   
351. //   */  
352. //  public InputStream doDownFile(String url) {  
353. //      /** 创建HttpGet对象 **/  
354. //      HttpGet httpRequest = new HttpGet(url);  
355. //      httpRequest.setHeaders(this.getHeader());  
356. //      try {  
357. //          /** 保持会话Session **/  
358. //          /** 设置Cookie **/  
359. //          MyHttpCookies li = new MyHttpCookies(context);  
360. //          CookieStore cs = li.getuCookie();  
361. //          /** 第一次请求App保存的Cookie为空,所以什么也不做,只有当APP的Cookie不为空的时。把请请求的Cooke放进去 **/  
362. //          if (cs != null) {  
363. //              httpClient.setCookieStore(li.getuCookie());  
364. //          }  
365. //          /** 保持会话Session end **/  
366. //          /* 发送请求并等待响应 */  
367. //          HttpResponse httpResponse = httpClient.execute(httpRequest);  
368. //          /* 若状态码为200 ok */  
369. //          if (httpResponse.getStatusLine().getStatusCode() == 200) {  
370. //              /** 执行成功之后得到 **/  
371. //              /** 成功之后把返回成功的Cookis保存APP中 **/  
372. //              // 请求成功之后,每次都设置Cookis。保证每次请求都是最新的Cookis  
373. //              li.setuCookie(httpClient.getCookieStore());  
374. //              this.contentLength = httpResponse.getEntity()  
375. //                      .getContentLength();  
376. //              /* 读返回数据 */  
377. //              return httpResponse.getEntity().getContent();  
378. //          } else {  
379. //              strResult = "Error Response: "  
380. //                      + httpResponse.getStatusLine().toString();  
381. //          }  
382. //      } catch (ClientProtocolException e) {  
383. //          strResult = e.getMessage().toString();  
384. //          e.printStackTrace();  
385. //      } catch (IOException e) {  
386. //          strResult = e.getMessage().toString();  
387. //          e.printStackTrace();  
388. //      } catch (Exception e) {  
389. //          strResult = e.getMessage().toString();  
390. //          e.printStackTrace();  
391. //      } finally {  
392. //          // httpRequest.abort();  
393. //          // this.shutDownClient();  
394. //      }  
395. //      this.contentLength = 0;  
396. //      return null;  
397. //  }  
398.   
399. /**
400.      * 异常自动恢复处理, 使用HttpRequestRetryHandler接口实现请求的异常恢复
401.      */  
402. private static HttpRequestRetryHandler requestRetryHandler = new HttpRequestRetryHandler() {  
403. // 自定义的恢复策略  
404. public boolean retryRequest(IOException exception, int executionCount,  
405.                 HttpContext context) {  
406. // 设置恢复策略,在发生异常时候将自动重试N次  
407. if (executionCount >= 3) {  
408. // 如果超过最大重试次数,那么就不要继续了  
409. return false;  
410.             }  
411. if (exception instanceof NoHttpResponseException) {  
412. // 如果服务器丢掉了连接,那么就重试  
413. return true;  
414.             }  
415. if (exception instanceof SSLHandshakeException) {  
416. // 不要重试SSL握手异常  
417. return false;  
418.             }  
419.             HttpRequest request = (HttpRequest) context  
420.                     .getAttribute(ExecutionContext.HTTP_REQUEST);  
421.             boolean idempotent = (request instanceof HttpEntityEnclosingRequest);  
422. if (!idempotent) {  
423. // 如果请求被认为是幂等的,那么就重试  
424. return true;  
425.             }  
426. return false;  
427.         }  
428.     };  
429.   
430. public long getContentLength() {  
431. return contentLength;  
432.     }  
433.   
434. /**
435.      * 假如obj对象 是null返回""
436.      * @param obj
437.      * @return
438.      */  
439. public static String nullToString(Object obj){  
440. if(obj==null){  
441. return "";  
442.         }  
443. return obj.toString();  
444.     }  
445. }


 




1. package com.hlj.padtwo.util.util_public.httputil;  
2.   
3.   
4.   
5. import org.apache.http.Header;  
6. import org.apache.http.client.CookieStore;  
7. import org.apache.http.message.BasicHeader;  
8.   
9. import android.content.Context;  
10. import android.database.Cursor;  
11. import android.net.Uri;  
12. import android.net.wifi.WifiManager;  
13.   
14. /**
15.  * http请求的缓存和一些公用的参数
16.  * @author helijun
17.  *
18.  */  
19. public class MyHttpCookies {  
20. /** 每页数据显示最大数 */  
21. private static int pageSize = 10;  
22. /** 当前会话后的cokie信息 */  
23. private static CookieStore uCookie = null;  
24. /** 公用的HTTP提示头信息 */  
25. private static Header[] httpHeader;  
26. /** HTTP连接的网络节点 */  
27. private static String httpProxyStr;  
28. /**http请求的公用url部分**/  
29. public static String baseurl = "http://192.168.50.56:5056/River";  
30. /**上下文对象**/  
31.     Context context;  
32.       
33. public MyHttpCookies(Context context){  
34. this.context = context;  
35. /** y设置请求头 **/  
36. /** y设置请求头 **/  
37.         Header[] header = {  
38. new BasicHeader("PagingRows", String.valueOf(pageSize)) };  
39.         httpHeader = header;  
40.     }  
41.       
42. /**
43.      * 增加自动选择网络,自适应cmwap、CMNET、wifi或3G
44.      */  
45. "static-access")  
46. public void initHTTPProxy() {  
47.         WifiManager wifiManager = (WifiManager) (context.getSystemService(context.WIFI_SERVICE));  
48. if (!wifiManager.isWifiEnabled()) {  
49. "content://telephony/carriers/preferapn"); // 获取当前正在使用的APN接入点  
50.             Cursor mCursor =context. getContentResolver().query(uri, null, null, null,  
51.                     null);  
52. if (mCursor != null) {  
53. // 游标移至第一条记录,当然也只有一条  
54.                 httpProxyStr = mCursor.getString(mCursor  
55. "proxy"));  
56.             }  
57. else {  
58.             httpProxyStr = null;  
59.         }  
60.     }  
61.       
62. public int getPageSize() {  
63. return pageSize;  
64.     }  
65.   
66. public void setPageSize(int pageSize) {  
67. this.pageSize = pageSize;  
68.     }  
69.   
70. public CookieStore getuCookie() {  
71. return uCookie;  
72.     }  
73.   
74. public void setuCookie(CookieStore uCookie) {  
75. this.uCookie = uCookie;  
76.     }  
77.   
78.   
79. public Header[] getHttpHeader() {  
80. return httpHeader;  
81.     }  
82.   
83. public String getHttpProxyStr() {  
84. return httpProxyStr;  
85.     }  
86. }

标签:http,请求,new,----,org,apache,import,Android
From: https://blog.51cto.com/u_16034393/6260649

相关文章

  • 美颜SDK的隐私保护与安全性分析
    随着智能手机和移动应用的普及,美颜SDK已经成为了很多应用的标配。美颜SDK的使用可以让用户在拍照或者视频聊天时,实现自拍美颜、滤镜、磨皮、瘦脸等效果。但是,在享受美颜SDK带来的便利的同时,我们也需要关注美颜SDK的隐私保护与安全性问题。一、了解数据流程美颜SDK会从用户的相机或......
  • 性能测试的核心原理
    性能测试的核心原理1基于协议,前后端交互机制,性能核心。基于界面决定和前端用户交互,基于代码决定了后端。1网络分布式架构。2单机应用,比如安安兔,鲁大师。主要判断io读写,以及对资源的消耗。2多线程,模拟多个虚拟用户量同时访问系统。3模拟真实的场景。场......
  • pacs系统核心层服务器,PACS(影像归档和通信系统)
    针对目前医疗业务与网络的逐步融合正成为国内外医院信息化发展的趋势,采用c++为编程语言,MSSQL为数据库,DICOM3.0标准为接口,设计和开发了一种基于医学影像PACS,对医疗数据进行采集、分析和处理的系统。经测试,系统运行稳定,性能良好,能够准确有效的对数据进行采集、分析和处理。PACS(影......
  • Android实现推送方式解决方案 (转1)
    Android实现推送方式解决方案本文介绍在Android中实现推送方式的基础知识及相关解决方案。 1.推送方式基础知识: 当我们开发需要和服务器交互的应用程序时,基本上都需要获取服务器端的数据,比如《地震应急通》就需要及时获取服务器上最新的地震信息。要获取服务器上不定时更新......
  • Android自定义Dialog(zhuang)
    Android自定义Dialog这段时间在做一个项目,需要使用到自定义Dialog,先在网上找了一下资料,发现还是有很多没有讲清楚的,在此给出一个Demo,一来可以方便广大码农,二来也可以方便自己,以备不时之需。。。先来一张图吧,很简单,只有一个Activity,当点击Button的时候就弹出这个自定义的Dialo......
  • firewalld规则配置
    firewalld规则配置一、概念动态防火墙启动新规则时,不会像iptables一样,先清空规则,再启动所有规则,如此会对现在程序有影响,哪怕只是一条规则。而firewalld规则变更不需要对整个防火墙规则重载,可直接添加新规则iptables与firewalld的关系firewalld底层使用iptables作为防......
  • 文盘Rust —— rust连接oss | 京东云技术团队
    作者:京东科技贾世闻对象存储是云的基础组件之一,各大云厂商都有相关产品。这里跟大家介绍一下rust与对象存储交到的基本套路和其中的一些技巧。基本连接我们以[S3sdk](https://github.com/awslabs/aws-sdk-rust)为例来说说基本的连接与操作,作者验证过aws、京东云、阿里云。......
  • Centos7使用s3fs-fuse挂载minio对象存储实践
    Centos7使用s3fs-fuse挂载minio对象存储实践事前准备主机可以访问到对象存储API、例如minio默认的9000端口主机安装好s3fs软件已在minio上创建存储桶安装s3fs(本文使用centos发行版)其他发行版本教程请参考Github官网Github:https://github.com/s3fs-fuse/s3fs-fus......
  • 自定义 li 标签序列的样式
    第一步删除li标签的默认样式,取消::mark代理样式(默认样式)。第一步已经把默认样式取消了,自然没有了序号,使用CSS的counter()函数和counter-increment属性来自定义序列号。通过list-style-type:none删除li标签的默认样式在li标签样式中设置counter-increment:st......
  • C++标准库和模板库的区别和联系?
    C++标准库包含模板库。C++标准库由三组库构成(std::是个名称空间标识符,C++标准库中的函数或者对象都是在命名空间std中定义的):(1)C库:由C标准库扩展而来,强调结构、函数和过程,不支持面向对象技术。(2)C++库:增加了面向对象的库,包含了既有关键功能的类(3)标准模板库(STL):高效的C++程序库。该......