Android:使用HttpClient访问HTTP/HTTPS服务器
来源:互联网 发布:巨人网络借壳a股上市 编辑:程序博客网 时间:2024/04/25 19:56
网络请求类:
public class NetworkConnector { private static final int TIMEOUT = 10 * 1000; private static DefaultHttpClient getHttpClient() { try { HttpParams params = new BasicHttpParams(); HttpConnectionParams.setConnectionTimeout(params, TIMEOUT); HttpConnectionParams.setSoTimeout(params, TIMEOUT); HttpProtocolParams.setUserAgent(params, null); SchemeRegistry registry = new SchemeRegistry(); registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80)); final SslSocketFactory customSSLSocketFactory = SslSocketFactory.getSocketFactory(); customSSLSocketFactory.setHostnameVerifier(SslSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); registry.register(new Scheme("https", customSSLSocketFactory, 443)); ClientConnectionManager manager = new ThreadSafeClientConnManager(params, registry); DefaultHttpClient client = new DefaultHttpClient(manager, params); return client; } catch (Exception e) { e.printStackTrace(); return new DefaultHttpClient(); } } public synchronized static ResponseInfo execute(String url, byte[] buff, Map<String, String> headers) { DefaultHttpClient httpClient = getHttpClient(); int responseCode = 0; InputStream in = null; try { HttpPost request = new HttpPost(url); if (headers != null && !headers.isEmpty()) { Iterator it = headers.keySet().iterator(); String key = null; while (it.hasNext()) { key = it.next().toString(); request.setHeader(key, headers.get(key)); } } request.setHeader("Content-Type", "application/octet-stream; charset=utf-8"); HttpEntity entity = new ByteArrayEntity(buff); request.setEntity(entity); HttpResponse response = httpClient.execute(request); responseCode = response.getStatusLine().getStatusCode(); if (responseCode == 200 || responseCode == 201) { InputStream resIn = response.getEntity().getContent(); int len = (int) response.getEntity().getContentLength(); if (resIn != null && len > 0) { BufferedInputStream bufIn = new BufferedInputStream(resIn); byte[] data = new byte[len]; bufIn.read(data, 0, len); return new ResponseInfo(0, getHeaders(response.getAllHeaders()), data); } } } catch (Exception e) { e.printStackTrace(); if (responseCode != 200) { try { if (in != null) { in.close(); } httpClient.getConnectionManager().shutdown(); } catch (IOException e1) { e1.printStackTrace(); } } } finally { try { if (in != null) { in.close(); } httpClient.getConnectionManager().shutdown(); } catch (IOException e) { e.printStackTrace(); } } return null; } private static Map<String, String> getHeaders(Header[] headerArr) { Map<String, String> headerMap = new HashMap<>(); if (headerArr != null) { for (Header header : headerArr) { headerMap.put(header.getName(), header.getValue()); } } return headerMap; }}
处理网络请求的子线程:
public class RequestRunnable implements Runnable { private BaseRequest.RequestCallback listener; private byte[] buf; private String urlString; private boolean isRun; private Map<String, String> headers; private int apiId; public RequestRunnable(int apiId, String urlString, byte[] buf, Map<String, String> headers, BaseRequest.RequestCallback listener) { this.isRun = true; this.urlString = urlString; this.buf = buf; this.headers = headers; this.listener = listener; this.apiId = apiId; } public void cancelRequest() { this.isRun = false; } @Override public void run() { ResponseInfo response = NetworkConnector.execute(urlString, this.buf, headers); if (response != null) { response.apiId = apiId; } if (isRun) { Message msg = new Message(); msg.obj = response; msg.what = 1; mHandler.sendMessage(msg); } } private Handler mHandler = new Handler(Looper.getMainLooper()) { @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { case 1: if (msg.obj != null) { listener.onResponse((ResponseInfo) msg.obj); } else { listener.onErrorResponse(apiId); } break; } } };}
线程池工具类:
public class ThreadPoolUtil { private static int CORE_POOL_SIZE = Runtime.getRuntime().availableProcessors() + 1; private static int MAX_POOL_SIZE = CORE_POOL_SIZE * 2 + 1; private static int KEEP_ALIVE_TIME = 60 * 10; private static BlockingQueue<Runnable> workQueue = new LinkedBlockingQueue<>(128); private static ThreadPoolExecutor threadPool; private ThreadPoolUtil() { } static { threadPool = new ThreadPoolExecutor(CORE_POOL_SIZE, MAX_POOL_SIZE, KEEP_ALIVE_TIME, TimeUnit.SECONDS, workQueue, new ThreadFactory() { private final AtomicInteger integer = new AtomicInteger(); @Override public Thread newThread(Runnable r) { return new Thread(r, "thread:" + integer.getAndIncrement()); } }); } public static void execute(Runnable runnable) { threadPool.execute(runnable); }}
调用:
/** * 调用 * @param apiId 接口id * @param url 服务器url * @param buf 需要上传的字节数组 */protected final void requestData(int apiId, String url, byte[] buf) { ThreadPoolUtil.execute(new RequestRunnable(apiId, url, buf, getHeaders(), this));}
0 0
- Android:使用HttpClient访问HTTP/HTTPS服务器
- Android使用httpclient访问http
- [Android实例] Android 使用HttpClient访问https
- Android中使用https(HTTP+SSL)访问服务器
- android HttpClient 访问https
- Android在使用HttpClient访问https时认证策略
- Android在使用HttpClient访问https时认证策略
- http(16):如何使用HttpClient库用代码访问服务器
- android 访问https服务器
- android httpClient 支持HTTPS的访问方式
- android httpClient 支持HTTPS的访问方式
- Android Https访问(HttpClient,Httpurlconnect,Okhttp)
- Android使用HTTP协议访问网络——HttpClient
- 使用httpclient来进行https访问
- HttpClient 使用代理访问Https【转】
- 使用httpclient构造http/https客户端
- Android网络访问之http、https、 cookie的使用
- Use java.net.HttpURLConnection/HttpClient 访问web service ( HTTP/HTTPS)
- Java 正则表达式
- java file类操作常用类的结构
- linux EHCI DRIVER之中断处理函数ehci_irq()分析(二)
- 魔术方法之简单实例
- window bat xcopy用法示例
- Android:使用HttpClient访问HTTP/HTTPS服务器
- An internal error occurred during: "Updating Maven Project".Unsupported IClasspathEntry kind=4问题解决备忘
- 交换两个变量的(六种)方法分析
- 299. Bulls and Cows
- 最新常用的Google 高级搜索技巧
- 关于ssh框架action传值中文乱码问题
- java定时操作之Timer和TimerTas
- Eclipse 在异常关闭后,启动闪退的解决办法
- JAVA面向对象三大特征