package com.pan.simplepicture.http; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.StatusLine; import org.apache.http.client.HttpClient; import org.apache.http.client.HttpRequestRetryHandler; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.methods.HttpRequestBase; import org.apache.http.entity.ByteArrayEntity; import org.apache.http.impl.client.AbstractHttpClient; import org.apache.http.protocol.BasicHttpContext; import org.apache.http.protocol.HttpContext; import org.apache.http.protocol.SyncBasicHttpContext; import android.text.TextUtils; import com.pan.simplepicture.utils.IOUtils; /** * Created by efida on 2014/6/7. * */ public class HttpHelper { public static String URL_BEATY = "http://115.28.54.40:8080/beautyideaInterface/api/v1/"; public static String URL_AT = "http://i.animetaste.net/api/"; /** get请求,获取返回字符串内容 */ public static HttpResult get(String url) { HttpGet httpGet = new HttpGet(url); return execute(url, httpGet); } /** post请求,获取返回字符串内容 */ public static HttpResult post(String url, byte[] bytes) { HttpPost httpPost = new HttpPost(url); ByteArrayEntity byteArrayEntity = new ByteArrayEntity(bytes); httpPost.setEntity(byteArrayEntity); return execute(url, httpPost); } /** 下载 */ public static HttpResult download(String url) { HttpGet httpGet = new HttpGet(url); return execute(url, httpGet); } private static HttpResult execute(String url, HttpRequestBase requestBase) { boolean isHttps = url.startsWith("https://"); AbstractHttpClient httpClient = HttpClientFactory.create(isHttps); HttpContext httpContext = new SyncBasicHttpContext( new BasicHttpContext()); HttpRequestRetryHandler retryHandler = httpClient .getHttpRequestRetryHandler(); int retryCount = 0; boolean retry = true; while (retry) { try { HttpResponse response = httpClient.execute(requestBase, httpContext); if (response != null) { return new HttpResult(response, httpClient, requestBase); } } catch (Exception e) { IOException ioException = new IOException(e.getMessage()); retry = retryHandler.retryRequest(ioException, ++retryCount, httpContext); e.printStackTrace(); } } return null; } /** http的返回结果,可以直接从中获取返回的字符串或者流 */ public static class HttpResult { private HttpResponse mResponse; private InputStream mIn; private String mStr; private HttpClient mHttpClient; private HttpRequestBase mRequestBase; public HttpResult(HttpResponse response, HttpClient httpClient, HttpRequestBase requestBase) { mResponse = response; mHttpClient = httpClient; mRequestBase = requestBase; } public int getCode() { StatusLine status = mResponse.getStatusLine(); return status.getStatusCode(); } public String getString() { if (!TextUtils.isEmpty(mStr)) { return mStr; } InputStream inputStream = getInputStream(); ByteArrayOutputStream out = null; if (inputStream != null) { try { out = new ByteArrayOutputStream(); byte[] buffer = new byte[1024 * 4]; int len = -1; while ((len = inputStream.read(buffer)) != -1) { out.write(buffer, 0, len); } byte[] data = out.toByteArray(); mStr = new String(data, "utf-8"); } catch (Exception e) { e.printStackTrace(); } finally { IOUtils.close(out); } } return mStr; } public InputStream getInputStream() { if (mIn == null && getCode() < 300) { HttpEntity entity = mResponse.getEntity(); try { mIn = entity.getContent(); } catch (Exception e) { e.printStackTrace(); } } return mIn; } public void close() { if (mRequestBase != null) { mRequestBase.abort(); } IOUtils.close(mIn); if (mHttpClient != null) { mHttpClient.getConnectionManager().closeExpiredConnections(); } } } }