版权声明:本文为延成原创文章,转载请标明出处

     //Application可以随意切换网络框架
//        HttpProxy.init(VolleyHelper.getInstance(this));HttpProxy.init(OkHttpHelper.getInstance(this));
/*** @author Mr.release* @Describe*/
public class HttpProxy implements IRequestManager {private static IRequestManager iRequestManager;private static HttpProxy _instance;private HttpProxy() {}public static HttpProxy obtain() {synchronized (HttpProxy.class) {if (_instance == null) {_instance = new HttpProxy();}}return _instance;}public static void init(IRequestManager manager) {iRequestManager = manager;}@Overridepublic void get(String url, ICallBack callBack) {iRequestManager.get(url, callBack);}@Overridepublic void get(String url, Map<String, String> heads, ICallBack callBack) {iRequestManager.get(url, heads, callBack);}@Overridepublic void post(String url, ICallBack callBack) {iRequestManager.post(url, callBack);}@Overridepublic void post(String url, Map<String, String> heads, Map<String, String> params, ICallBack callBack) {iRequestManager.post(url, heads, params, callBack);}
}
public class OkHttpHelper implements IRequestManager {public static final String TAG = "OkHttpHelper";private static OkHttpHelper mOkHttpHelper;private static OkHttpClient client;private Handler mHandler;private OkHttpHelper(Context context) {File sdcache = context.getExternalCacheDir();int cacheSize = 10 * 1024 * 1024;//设置缓存大小OkHttpClient.Builder builder = new OkHttpClient.Builder().connectTimeout(15, TimeUnit.SECONDS).writeTimeout(20, TimeUnit.SECONDS).readTimeout(20, TimeUnit.SECONDS).cache(new Cache(sdcache.getAbsoluteFile(), cacheSize));//设置缓存的路径builder.sslSocketFactory(createSSLSocketFactory());builder.hostnameVerifier(new HostnameVerifier() {@Overridepublic boolean verify(String hostname, SSLSession session) {return true;}});client = builder.build();mHandler = new Handler();}public static OkHttpHelper getInstance(Context context) {if (mOkHttpHelper == null) {synchronized (OkHttpHelper.class) {if (mOkHttpHelper == null) {mOkHttpHelper = new OkHttpHelper(context);}}}return mOkHttpHelper;}@Overridepublic void get(String url, ICallBack callBack) {if (TextUtils.isEmpty(url)) {return;}Request request = new Request.Builder().url(url).build();client.newCall(request).enqueue(new Callback() {@Overridepublic void onFailure(Call call, IOException e) {sendFailCallback(callBack, e.toString());}@Overridepublic void onResponse(Call call, final Response response) throws IOException {LogUtils.i(TAG, "onResponse: " + Thread.currentThread());boolean isSuccessful = response.isSuccessful();sendSuccessCallback(callBack, isSuccessful, response);}});}@Overridepublic void get(String url, Map<String, String> heads, ICallBack callBack) {if (TextUtils.isEmpty(url)) {return;}Headers headers = appendHeaders(heads);Request request = new Request.Builder().headers(headers).url(url).build();client.newCall(request).enqueue(new Callback() {@Overridepublic void onFailure(Call call, IOException e) {sendFailCallback(callBack, e.toString());}@Overridepublic void onResponse(Call call, final Response response) throws IOException {boolean isSuccessful = response.isSuccessful();sendSuccessCallback(callBack, isSuccessful, response);}});}@Overridepublic void post(String url, ICallBack callBack) {if (TextUtils.isEmpty(url)) {return;}Request request = new Request.Builder().url(url).build();client.newCall(request).enqueue(new Callback() {@Overridepublic void onFailure(Call call, IOException e) {sendFailCallback(callBack, e.toString());}@Overridepublic void onResponse(Call call, final Response response) throws IOException {boolean isSuccessful = response.isSuccessful();sendSuccessCallback(callBack, isSuccessful, response);}});}@Overridepublic void post(String url, Map<String, String> heads, Map<String, String> params, ICallBack callBack) {if (TextUtils.isEmpty(url)) {return;}Headers headers = appendHeaders(heads);RequestBody requestBody = appendBody(params);Request request = new Request.Builder().headers(headers).post(requestBody).url(url).build();client.newCall(request).enqueue(new Callback() {@Overridepublic void onFailure(Call call, IOException e) {sendFailCallback(callBack, e.toString());}@Overridepublic void onResponse(Call call, final Response response) throws IOException {boolean isSuccessful = response.isSuccessful();sendSuccessCallback(callBack, isSuccessful, response);}});}private Headers appendHeaders(Map<String, String> headers) {Headers.Builder headerBuilder = new Headers.Builder();if (headers == null || headers.isEmpty())return headerBuilder.build();for (String key : headers.keySet()) {headerBuilder.add(key, headers.get(key));}return headerBuilder.build();}private RequestBody appendBody(Map<String, String> params) {FormBody.Builder body = new FormBody.Builder();if (params == null || params.isEmpty()) {return body.build();}for (Map.Entry<String, String> entry : params.entrySet()) {body.add(entry.getKey(), entry.getValue().toString());}return body.build();}private void sendSuccessCallback(final ICallBack callback, final boolean isSuccess, final Response response) {try {String responseString = response.body().string();mHandler.post(new Runnable() {@Overridepublic void run() {if (isSuccess == true) {callback.onSuccess(responseString);} elsecallback.onFailure(response.message().toString());}});} catch (IOException e) {e.printStackTrace();}}private void sendFailCallback(final ICallBack callback, String throwable) {mHandler.post(new Runnable() {@Overridepublic void run() {callback.onFailure(throwable);}});}public SSLSocketFactory createSSLSocketFactory() {SSLSocketFactory ssfFactory = null;try {SSLContext sc = SSLContext.getInstance("TLS");sc.init(null, new TrustManager[]{new TrustAllCerts()}, new SecureRandom());ssfFactory = sc.getSocketFactory();} catch (Exception e) {}return ssfFactory;}/*** 用于信任所有证书*/class TrustAllCerts implements X509TrustManager {@Overridepublic void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {}@Overridepublic void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {}@Overridepublic X509Certificate[] getAcceptedIssuers() {return new X509Certificate[0];}}
}
/*** @author Mr.release* @create 2019/3/22* @Describe*/
public class VolleyHelper implements IRequestManager {private static final String TAG = VolleyHelper.class.getSimpleName();RequestQueue requestQueue;private static VolleyHelper _instance;private VolleyHelper(Context context) {requestQueue = Volley.newRequestQueue(context);}public static VolleyHelper getInstance(Context context) {if (_instance == null) {synchronized (VolleyHelper.class) {if (_instance == null) {_instance = new VolleyHelper(context);}}}return _instance;}@Overridepublic void get(String url, ICallBack callBack) {if (TextUtils.isEmpty(url)) {return;}StringRequest request = new StringRequest(Request.Method.GET, url,s -> callBack.onSuccess(s),volleyError -> callBack.onFailure(volleyError.toString())) {};requestQueue.add(request);}@Overridepublic void get(String url, Map<String, String> heads, ICallBack callBack) {if (TextUtils.isEmpty(url)) {return;}StringRequest request = new StringRequest(Request.Method.GET, url,s -> callBack.onSuccess(s),volleyError -> callBack.onFailure(volleyError.toString())) {@Overridepublic Map<String, String> getHeaders() throws AuthFailureError {return heads;}};requestQueue.add(request);}@Overridepublic void post(String url, ICallBack callBack) {if (TextUtils.isEmpty(url)) {return;}StringRequest request = new StringRequest(Request.Method.POST, url,s -> callBack.onSuccess(s),volleyError -> callBack.onFailure(volleyError.toString())) {};requestQueue.add(request);}@Overridepublic void post(String url, Map<String, String> heads, Map<String, String> params, ICallBack callBack) {if (TextUtils.isEmpty(url)) {return;}StringRequest request = new StringRequest(Request.Method.POST, url,s -> callBack.onSuccess(s),volleyError -> callBack.onFailure(volleyError.toString())) {@Overrideprotected Map<String, String> getParams() throws AuthFailureError {return params;}@Overridepublic Map<String, String> getHeaders() throws AuthFailureError {return heads;}};requestQueue.add(request);}
}
/*** @author Mr.release* @create 2019/4/23* @Describe*/
public abstract class HttpCallback<Result> implements ICallBack {@Overridepublic void onSuccess(String response) {Class<?> cls = analysisClazzInfo(this);Result result = (Result) JSON.parseObject(response, cls);onSuccess(result);}public abstract void onSuccess(Result result);public static Class<?> analysisClazzInfo(Object object) {Type genType = object.getClass().getGenericSuperclass();Type[] params = ((ParameterizedType) genType).getActualTypeArguments();return (Class<?>) params[0];}
}
/*** @author Mr.release* @create 2019/3/29* @Describe*/
public interface  ICallBack {void onFailure(String throwable);void onSuccess(String response);
}
/*** @author Mr.release* @create 2019/4/23* @Describe*/
public interface IRequestManager {void get(String url, ICallBack callBack);void get(String url, Map<String, String> heads, ICallBack callBack);void post(String url, ICallBack callBack);void post(String url, Map<String, String> heads, Map<String, String> params, ICallBack callBack);
}
/*** @author Mr.release* @create 2019/3/22* @Describe*/
public interface URL {String BASE_URL="http://api.tianapi.com/";String news = BASE_URL + "it?key=4a0090627cf07a50def18da875165740&num=20";
}

HttpProxy网络请求代理相关推荐

  1. Java网络请求代理API的设计思路

    一个具有代理功能的API,用于对远程请求进行包装,从而进行日志记录/数值记录/响应检查/... https://github.com/kevinten10/vrml/ 问题背景 在项目开发中,网络请求 ...

  2. Flutter 实战开发-网络请求

    flutter中常见的网络请求有三种分别是 1,Dart 原生的网络请求 HttpClient. 2,第三方网络请求 http 3,以及 Flutter 中的 Dio. 本文主要比较细致的讲解上述网络 ...

  3. uni-app——一种通过Nginx反向代理处理302重定向请求解决网络请求中无法获取Cookie的解决方案

    问题描述 小程序中不会自动保存和发送Cookie 使用插件(https://uniapp.dcloud.io/api/request/request)方法不能解决302重定向情况下获取Cookie 小 ...

  4. 爬虫实战学习笔记_4 网络请求urllib3模块:发送GET/POST请求实例+上传文件+IP代理+json+二进制+超时

    1 urllib3模块简介 urllib3是一个第三方的网络请求模块(单独安装该模块),在功能上比Python自带的urllib强大. 1.1了解urllib3 urllib3库功能强大,条理清晰的用 ...

  5. 爬虫实战学习笔记_3 网络请求urllib模块:设置IP代理+处理请求异常+解析URL+解码+编码+组合URL+URL连接

    1 设置IP代理 1.1 方法论述 使用urllib模块设置代理IP是比较简单的,首先需要创建ProxyHandler对象,其参数为字典类型的代理IP,键名为协议类型(如HTTP或者HTTPS),值为 ...

  6. ios开发防止App被抓包(一句话实现iOS应用底层所有网络请求拦截(如ajax请求拦截),包含http-dns解决方法,有效防止DNS劫持,用于分析http,https请求,禁用/允许代理,防抓包)

    ZXRequestBlock 安装 通过CocoaPods安装 pod 'ZXRequestBlock' 手动导入 将ZXRequestBlock拖入项目中. 导入头文件 #import " ...

  7. 【Mitmproxy】Mac + Python + mitmproxy透明代理配置,拦截所有网络请求

    Mac OS Monterey 版本 12.1 mitmproxy==8.0.0 Mitmproxy --version Mitmproxy: 8.0.0.dev Python: 3.9.13 Ope ...

  8. android post请求_Vue 网络请求框架 axios 使用教程

    点击上方"代码集中营",设为星标 优秀文章,第一时间送达! 前期回顾 1. Vue 学习入门指南 2. Vue 入门环境搭建 3. Visual Studio Code 使用指南 ...

  9. android post请求添加公共参数_XHttp2 一个功能强悍的网络请求库

    XHttp2 一个功能强悍的网络请求库,使用RxJava2 + Retrofit2 + OKHttp组合进行封装.还不赶紧点击使用说明文档,体验一下吧! 项目地址 关于我 https://github ...

最新文章

  1. 汇编: 使用ds data
  2. SharePoint Foundation和SharePoint Server的区别
  3. 关于8位AD_DA转换芯片的采样率问题
  4. python字符串截取方法_如何使用python语言中的字符串方法截取字符串
  5. java servlet 返回404_java项目访问servlet出现404
  6. linux备份还原系统程序
  7. Java并发编程中的join()与interrupt()函数
  8. NAACL2021论文:UniDrop:一种简单而有效的Transformer提升技术
  9. Kali-工具-crunch(字典生成)
  10. 各种cms getshell技巧
  11. PHP 8.1性能基准测试结果出炉,比7.0版本提升44%
  12. python 检验两个样本均值是否相同_假设检验|第四章:置信区间和置信水平
  13. 丰田chr内外循环怎么区分_丰田C-HR怎么开启暖风
  14. 彻底解决2440/2410触摸屏跳点以及抖动问题
  15. c语言分拆素数和,分拆素数和。
  16. 59、可燃材料仓库的防火检查要求
  17. 图片素材类网站必备以图搜图、智能搜图识图图像搜索系统imgso,让素材网站更智能专业
  18. 太空动作游戏《Phobos Vector Prime》创作经验分享
  19. 【FME】矢量间进行空间传值、属性关联
  20. .net开发过程中,错误集锦

热门文章

  1. linux删除slave网卡,Linux bonding网卡与其slave共同使用
  2. pyecharts渲染图片的三种方法
  3. shell-awk命令详解
  4. ActiveMQ的简单实现
  5. Agile敏捷开发管理Salesforce项目(第一篇)- 4大核心价值观+12条原则
  6. DeepNet :Scaling Transformers to 1000 Layer
  7. Java笔记(韩顺平Java基础7-8章)
  8. CNN用于句子分类时的超参数分析
  9. 【HaaS Python 硬件积木】 BMP280气压传感器
  10. LU分解,LDLT分解,Cholesky分解