package net.yasite.net.httpclient; import java.security.KeyStore; import net.yasite.api.BaseAPI; import net.yasite.net.HttpConstant; import net.yasite.net.SSLSocketFactoryEx; import net.yasite.util.ActivityUtil; import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; import org.apache.http.HttpVersion; import org.apache.http.client.methods.HttpUriRequest; import org.apache.http.conn.ClientConnectionManager; import org.apache.http.conn.ConnectTimeoutException; import org.apache.http.conn.scheme.PlainSocketFactory; import org.apache.http.conn.scheme.Scheme; import org.apache.http.conn.scheme.SchemeRegistry; import org.apache.http.conn.ssl.SSLSocketFactory; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager; import org.apache.http.params.BasicHttpParams; import org.apache.http.params.HttpConnectionParams; import org.apache.http.params.HttpParams; import org.apache.http.params.HttpProtocolParams; import org.apache.http.protocol.HTTP; import org.apache.http.util.EntityUtils; public abstract class AHttpClient { protected HttpUriRequest request; protected DefaultHttpClient httpClient; protected HttpResponse response; protected String content = ""; public DefaultHttpClient getHttpClient() { return httpClient; } public void setHttpClient(DefaultHttpClient httpClient) { this.httpClient = httpClient; } public AHttpClient(BaseAPI params){ if (ActivityUtil.isWifiConnected(params.getContext())) { httpClient = getDefaultHttpClient(HttpConstant.DEFAULT_TIMEOUT); } else { httpClient = getDefaultHttpClient(HttpConstant.MAX_TIMEOUT); } } public HttpUriRequest getRequest() { return request; } public void setRequest(HttpUriRequest request) { this.request = request; } public abstract void doRequest(BaseAPI param) throws Exception ; protected void excute(HttpResponse response, String content,BaseAPI param) throws Exception{ try { int statusCode = response.getStatusLine().getStatusCode(); if (statusCode == HttpStatus.SC_OK) { content = EntityUtils.toString(response.getEntity(), "utf-8"); if (content == null || "".equals(content)) { throw new Exception("服务器繁忙!"); } else { param.setResponse(content); param.setStatuesCode(statusCode); param.setRes(response); } } else if (statusCode == HttpStatus.SC_INTERNAL_SERVER_ERROR) { throw new Exception("服务器异常!"); } } catch (ConnectTimeoutException e) { throw new Exception("请求超时!"); } catch (java.lang.OutOfMemoryError e) { throw new Exception("系统出错!"); } catch (Exception e) { e.printStackTrace(); throw new Exception("服务器繁忙!"); } finally { request.abort(); } } public DefaultHttpClient getDefaultHttpClient(int timeout) { try { KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType()); trustStore.load(null, null); SSLSocketFactory sf = new SSLSocketFactoryEx(trustStore); sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); HttpParams params = new BasicHttpParams(); HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1); HttpProtocolParams.setContentCharset(params, HTTP.UTF_8); HttpConnectionParams.setConnectionTimeout(params, HttpConstant.CONNECTION_TIMEOUT); HttpConnectionParams.setSoTimeout(params, timeout); SchemeRegistry registry = new SchemeRegistry(); registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80)); registry.register(new Scheme("https", sf, 443)); ClientConnectionManager ccm = new ThreadSafeClientConnManager(params, registry); return new DefaultHttpClient(ccm, params); } catch (Exception e) { return new DefaultHttpClient(); } } }