[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-4270":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":16,"stars7d":16,"stars30d":16,"stars90d":16,"forks30d":16,"starsTrendScore":16,"compositeScore":17,"rankGlobal":10,"rankLanguage":10,"license":18,"archived":19,"fork":19,"defaultBranch":20,"hasWiki":21,"hasPages":19,"topics":22,"createdAt":10,"pushedAt":10,"updatedAt":23,"readmeContent":24,"aiSummary":25,"trendingCount":16,"starSnapshotCount":16,"syncStatus":26,"lastSyncTime":27,"discoverSource":28},4270,"okhttputils","hongyangAndroid\u002Fokhttputils","hongyangAndroid","[停止维护]okhttp的辅助类","http:\u002F\u002Fblog.csdn.net\u002Flmj623565791\u002Farticle\u002Fdetails\u002F47911083",null,"Java",6843,2367,414,217,0,41,"Apache License 2.0",false,"master",true,[],"2026-06-12 02:01:01","# okhttp-utils\n\n>由于个人原因，现已停止维护。\n\n对okhttp的封装类，okhttp见：[https:\u002F\u002Fgithub.com\u002Fsquare\u002Fokhttp](https:\u002F\u002Fgithub.com\u002Fsquare\u002Fokhttp).\n\n目前对应okhttp版本`3.3.1`.\n\n## 用法\n\n* Android Studio\n\t\n\t```\n\tcompile 'com.zhy:okhttputils:2.6.2'\n\t```\n\t\n* Eclipse\n\t\n\t下载最新jar:[okhttputils-2\\_6\\_2.jar](okhttputils-2_6_2.jar?raw=true)\n\n\t注：需要同时导入okhttp和okio的jar，下载见：[https:\u002F\u002Fgithub.com\u002Fsquare\u002Fokhttp](https:\u002F\u002Fgithub.com\u002Fsquare\u002Fokhttp).\n\t\n\n## 目前对以下需求进行了封装\n* 一般的get请求\n* 一般的post请求\n* 基于Http Post的文件上传（类似表单）\n* 文件下载\u002F加载图片\n* 上传下载的进度回调\n* 支持取消某个请求\n* 支持自定义Callback\n* 支持HEAD、DELETE、PATCH、PUT\n* 支持session的保持\n* 支持自签名网站https的访问，提供方法设置下证书就行\n\n## 配置OkhttpClient\n\n默认情况下，将直接使用okhttp默认的配置生成OkhttpClient，如果你有任何配置，记得在Application中调用`initClient`方法进行设置。\n\n```java\npublic class MyApplication extends Application\n{\t\n\t@Override\n    public void onCreate()\n    {\n        super.onCreate();\n\n        OkHttpClient okHttpClient = new OkHttpClient.Builder()\n\u002F\u002F                .addInterceptor(new LoggerInterceptor(\"TAG\"))\n                  .connectTimeout(10000L, TimeUnit.MILLISECONDS)\n                  .readTimeout(10000L, TimeUnit.MILLISECONDS)\n                  \u002F\u002F其他配置\n                 .build();\n                 \n        OkHttpUtils.initClient(okHttpClient);\n\n    }\n}\n```\n别忘了在AndroidManifest中设置。\n\n## 对于Cookie(包含Session)\n\n对于cookie一样，直接通过cookiejar方法配置，参考上面的配置过程。\n\n```\nCookieJarImpl cookieJar = new CookieJarImpl(new PersistentCookieStore(getApplicationContext()));\nOkHttpClient okHttpClient = new OkHttpClient.Builder()\n          .cookieJar(cookieJar)\n          \u002F\u002F其他配置\n         .build();\n                 \nOkHttpUtils.initClient(okHttpClient);\n```\n目前项目中包含：\n\n* PersistentCookieStore \u002F\u002F持久化cookie\n* SerializableHttpCookie \u002F\u002F持久化cookie\n* MemoryCookieStore \u002F\u002Fcookie信息存在内存中\n\n如果遇到问题，欢迎反馈，当然也可以自己实现CookieJar接口，编写cookie管理相关代码。\n\n此外，对于持久化cookie还可以使用[https:\u002F\u002Fgithub.com\u002Ffranmontiel\u002FPersistentCookieJar](https:\u002F\u002Fgithub.com\u002Ffranmontiel\u002FPersistentCookieJar).\n\n相当于框架中只是提供了几个实现类，你可以自行定制或者选择使用。\n\n## 对于Log\n\n初始化OkhttpClient时，通过设置拦截器实现，框架中提供了一个`LoggerInterceptor `，当然你可以自行实现一个Interceptor 。\n\n```\n OkHttpClient okHttpClient = new OkHttpClient.Builder()\n       .addInterceptor(new LoggerInterceptor(\"TAG\"))\n        \u002F\u002F其他配置\n        .build();\nOkHttpUtils.initClient(okHttpClient);\n```\n\n\n## 对于Https\n\n依然是通过配置即可，框架中提供了一个类`HttpsUtils`\n\n* 设置可访问所有的https网站\n\n```\nHttpsUtils.SSLParams sslParams = HttpsUtils.getSslSocketFactory(null, null, null);\nOkHttpClient okHttpClient = new OkHttpClient.Builder()\n        .sslSocketFactory(sslParams.sSLSocketFactory, sslParams.trustManager)\n         \u002F\u002F其他配置\n         .build();\nOkHttpUtils.initClient(okHttpClient);\n```\n\n* 设置具体的证书\n\n```\nHttpsUtils.SSLParams sslParams = HttpsUtils.getSslSocketFactory(证书的inputstream, null, null);\nOkHttpClient okHttpClient = new OkHttpClient.Builder()\n        .sslSocketFactory(sslParams.sSLSocketFactory, sslParams.trustManager))\n         \u002F\u002F其他配置\n         .build();\nOkHttpUtils.initClient(okHttpClient);\n```\n\n* 双向认证\n\n```\nHttpsUtils.getSslSocketFactory(\n\t证书的inputstream, \n\t本地证书的inputstream, \n\t本地证书的密码)\n```\n\n同样的，框架中只是提供了几个实现类，你可以自行实现`SSLSocketFactory`，传入sslSocketFactory即可。\n\n##其他用法示例\n\n### GET请求\n\n```java\nString url = \"http:\u002F\u002Fwww.csdn.net\u002F\";\nOkHttpUtils\n    .get()\n    .url(url)\n    .addParams(\"username\", \"hyman\")\n    .addParams(\"password\", \"123\")\n    .build()\n    .execute(new StringCallback()\n\t        {\n\t            @Override\n\t            public void onError(Request request, Exception e)\n\t            {\n\t                \n\t            }\n\t\n\t            @Override\n\t            public void onResponse(String response)\n\t            {\n\t\n\t            }\n\t        });\n```\n\n### POST请求\n\n```java\n OkHttpUtils\n    .post()\n    .url(url)\n    .addParams(\"username\", \"hyman\")\n    .addParams(\"password\", \"123\")\n    .build()\n    .execute(callback);\n\n```\n\n### Post JSON\n\n```java\n  OkHttpUtils\n    .postString()\n    .url(url)\n    .content(new Gson().toJson(new User(\"zhy\", \"123\")))\n     .mediaType(MediaType.parse(\"application\u002Fjson; charset=utf-8\"))\n    .build()\n    .execute(new MyStringCallback());\n```\n\n提交一个Gson字符串到服务器端，注意：传递JSON的时候，不要通过addHeader去设置contentType，而使用`.mediaType(MediaType.parse(\"application\u002Fjson; charset=utf-8\"))`.。\n\n### Post File\n\n```java\n OkHttpUtils\n\t.postFile()\n\t.url(url)\n\t.file(file)\n\t.build()\n\t.execute(new MyStringCallback());\n```\n将文件作为请求体，发送到服务器。\n\n\n### Post表单形式上传文件\n\n```java\nOkHttpUtils.post()\u002F\u002F\n    .addFile(\"mFile\", \"messenger_01.png\", file)\u002F\u002F\n    .addFile(\"mFile\", \"test1.txt\", file2)\u002F\u002F\n    .url(url)\n    .params(params)\u002F\u002F\n    .headers(headers)\u002F\u002F\n    .build()\u002F\u002F\n    .execute(new MyStringCallback());\n```\n\n支持单个多个文件，`addFile`的第一个参数为文件的key，即类别表单中`\u003Cinput type=\"file\" name=\"mFile\"\u002F>`的name属性。\n\n### 自定义CallBack\n\n目前内部包含`StringCallBack`,`FileCallBack`,`BitmapCallback`，可以根据自己的需求去自定义Callback，例如希望回调User对象：\n\n```java\npublic abstract class UserCallback extends Callback\u003CUser>\n{\n    @Override\n    public User parseNetworkResponse(Response response) throws IOException\n    {\n        String string = response.body().string();\n        User user = new Gson().fromJson(string, User.class);\n        return user;\n    }\n}\n\n OkHttpUtils\n    .get()\u002F\u002F\n    .url(url)\u002F\u002F\n    .addParams(\"username\", \"hyman\")\u002F\u002F\n    .addParams(\"password\", \"123\")\u002F\u002F\n    .build()\u002F\u002F\n    .execute(new UserCallback()\n    {\n        @Override\n        public void onError(Request request, Exception e)\n        {\n            mTv.setText(\"onError:\" + e.getMessage());\n        }\n\n        @Override\n        public void onResponse(User response)\n        {\n            mTv.setText(\"onResponse:\" + response.username);\n        }\n    });\n\n```\n\n通过`parseNetworkResponse `回调的response进行解析，该方法运行在子线程，所以可以进行任何耗时操作，详细参见sample。\n\n\n### 下载文件\n\n```java\n OkHttpUtils\u002F\u002F\n\t.get()\u002F\u002F\n\t.url(url)\u002F\u002F\n\t.build()\u002F\u002F\n\t.execute(new FileCallBack(Environment.getExternalStorageDirectory().getAbsolutePath(), \"gson-2.2.1.jar\")\u002F\u002F\n\t{\n\t    @Override\n\t    public void inProgress(float progress)\n\t    {\n\t        mProgressBar.setProgress((int) (100 * progress));\n\t    }\n\t\n\t    @Override\n\t    public void onError(Request request, Exception e)\n\t    {\n\t        Log.e(TAG, \"onError :\" + e.getMessage());\n\t    }\n\t\n\t    @Override\n\t    public void onResponse(File file)\n\t    {\n\t        Log.e(TAG, \"onResponse :\" + file.getAbsolutePath());\n\t    }\n\t});\n```\n\n注意下载文件可以使用`FileCallback`，需要传入文件需要保存的文件夹以及文件名。\n\n\n### 显示图片\n\n```java\n OkHttpUtils\n    .get()\u002F\u002F\n    .url(url)\u002F\u002F\n    .build()\u002F\u002F\n    .execute(new BitmapCallback()\n    {\n        @Override\n        public void onError(Request request, Exception e)\n        {\n            mTv.setText(\"onError:\" + e.getMessage());\n        }\n\n        @Override\n        public void onResponse(Bitmap bitmap)\n        {\n            mImageView.setImageBitmap(bitmap);\n        }\n    });\n```\n\n显示图片，回调传入`BitmapCallback`即可。\n\n\n### 上传下载的进度显示\n\n```java\nnew Callback\u003CT>()\n{\n    \u002F\u002F...\n    @Override\n    public void inProgress(float progress)\n    {\n       \u002F\u002Fuse progress: 0 ~ 1\n    }\n}\n```\n\ncallback回调中有`inProgress `方法，直接复写即可。\n\n### HEAD、DELETE、PUT、PATCH\n\n```java\n\nOkHttpUtils\n     .put()\u002F\u002Falso can use delete() ,head() , patch()\n     .requestBody(RequestBody.create(null, \"may be something\"))\u002F\u002F\n     .build()\u002F\u002F\n     .execute(new MyStringCallback());\n```\n\n如果需要requestBody，例如：PUT、PATCH，自行构造进行传入。\n\n\n\n### 同步的请求\n\n```\n Response response = OkHttpUtils\n    .get()\u002F\u002F\n    .url(url)\u002F\u002F\n    .tag(this)\u002F\u002F\n    .build()\u002F\u002F\n    .execute();\n```\n\nexecute方法不传入callback即为同步的请求，返回Response。\n\n\n### 取消单个请求\n\n```java\n RequestCall call = OkHttpUtils.get().url(url).build();\n call.cancel();\n \n```\n\n### 根据tag取消请求\n\n目前对于支持的方法都添加了最后一个参数`Object tag`，取消则通过` OkHttpUtils.cancelTag(tag)`执行。\n\n例如：在Activity中，当Activity销毁取消请求：\n\n```\nOkHttpUtils\n    .get()\u002F\u002F\n    .url(url)\u002F\u002F\n    .tag(this)\u002F\u002F\n    .build()\u002F\u002F\n\n@Override\nprotected void onDestroy()\n{\n    super.onDestroy();\n    \u002F\u002F可以取消同一个tag的\n    OkHttpUtils.cancelTag(this);\u002F\u002F取消以Activity.this作为tag的请求\n}\n```\n比如，当前Activity页面所有的请求以Activity对象作为tag，可以在onDestory里面统一取消。\n\n## 混淆\n\n```\n#okhttputils\n-dontwarn com.zhy.http.**\n-keep class com.zhy.http.**{*;}\n\n\n#okhttp\n-dontwarn okhttp3.**\n-keep class okhttp3.**{*;}\n\n\n#okio\n-dontwarn okio.**\n-keep class okio.**{*;}\n\n\n```\n\n\n\n\n\n\n","hongyangAndroid\u002Fokhttputils 是一个基于 OkHttp 的辅助库，现已停止维护。它封装了 OkHttp 的常用功能，简化了网络请求的实现。核心功能包括 GET 和 POST 请求、文件上传与下载、进度回调、自定义 Callback 支持以及多种 HTTP 方法（如 HEAD、DELETE、PATCH、PUT）的支持。此外，该库还支持会话保持、自签名 HTTPS 网站访问和 Cookie 管理。适用于需要快速集成网络请求功能的 Android 项目，尤其适合对 OkHttp 有扩展需求但又希望减少代码量的开发者。",2,"2026-06-11 02:59:20","top_language"]