package com.zcsoft.androidclient.http; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.util.zip.GZIPInputStream; import org.apache.http.Header; import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.params.BasicHttpParams; import org.apache.http.params.HttpConnectionParams; import org.apache.http.params.HttpParams; import org.apache.http.util.EntityUtils; import com.zcsoft.androidclient.tools.MyLog; public class HttpRequest { /********************* * 请求URL的数据 * @param strURL - 请求数据的url * @return 服务端返回的数据 */ public static final String requestURL(String strURL){ MyLog.i("请求的url:"+strURL); String resString = "无网络"; try { //请求URL的数据 HttpGet httpRequest = new HttpGet(strURL); httpRequest.addHeader("Accept-Encoding", "gzip"); HttpParams httpParam = new BasicHttpParams(); //设置连接超时和请求超时时间为8秒 HttpConnectionParams.setConnectionTimeout(httpParam, 5000); HttpConnectionParams.setSoTimeout(httpParam, 5000); HttpClient httpClient = new DefaultHttpClient(httpParam); HttpResponse httpResponse = httpClient.execute(httpRequest); int nStatus = httpResponse.getStatusLine().getStatusCode(); if (nStatus == HttpStatus.SC_OK) { Header contentEncoding = httpResponse.getFirstHeader("Content-Encoding"); Header contentLenght = httpResponse.getFirstHeader("Content-Length"); if(contentEncoding != null && contentEncoding.getValue().equalsIgnoreCase("gzip")){ //解压缩GZip数据 int nDataLength=Integer.parseInt(contentLenght.getValue()); if(nDataLength > 1024*4){ resString= uncompressBigGZipData(httpResponse.getEntity().getContent()); }else resString= uncompressGZipData(httpResponse.getEntity().getContent()); }else{ resString= EntityUtils.toString(httpResponse.getEntity()); } } else if (nStatus == HttpStatus.SC_REQUEST_TIMEOUT){ //超时 resString = "超时"; } else{ resString = "响应码非200"; } } catch (Exception e) { resString = "连接异常"; MyLog.i(e.getMessage()); } finally { //这里要关闭一下吗? } MyLog.i("请求结果:"+resString); return resString; } /*********************** * 解压缩一般的数据 * @param instream - 要解压的数据流 * @return - 解压以后的字符串数据 */ public static final String uncompressGZipData(InputStream instream){ //解压缩一般的数据 //分配缓存较小 try { GZIPInputStream gin = new GZIPInputStream(instream); BufferedReader br = new BufferedReader( new InputStreamReader(gin)); char[] buf = new char[1024*12]; br.read(buf); gin.close(); String strRet = new String(buf); return strRet; } catch(Exception e) { return null; } } /*********************** * 解压缩大数据包 * @param instream - 要解压的数据流 * @return - 解压以后的字符串数据 */ public static final String uncompressBigGZipData(InputStream instream){ //解压缩大数据包 //专为大数据准备 //分配大的缓存 try { GZIPInputStream gin = new GZIPInputStream(instream); BufferedReader br = new BufferedReader( new InputStreamReader(gin)); char[] buf = new char[1024*200]; br.read(buf); gin.close(); String strRet = new String(buf); return strRet; } catch(Exception e) { return null; } } }