{"id":15130329,"url":"https://github.com/jkpang/ppnetworkhelper","last_synced_at":"2025-09-28T19:32:14.829Z","repository":{"id":52238683,"uuid":"65568771","full_name":"jkpang/PPNetworkHelper","owner":"jkpang","description":"AFNetworking 3.x 与YYCache封装","archived":true,"fork":false,"pushed_at":"2018-12-14T03:53:44.000Z","size":2515,"stargazers_count":1584,"open_issues_count":34,"forks_count":344,"subscribers_count":44,"default_branch":"master","last_synced_at":"2024-10-24T16:16:34.809Z","etag":null,"topics":["afnetworking","cache","cocoapods","ios","objective-c","yycache"],"latest_commit_sha":null,"homepage":"","language":"Objective-C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jkpang.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-08-12T16:44:02.000Z","updated_at":"2024-10-15T03:13:56.000Z","dependencies_parsed_at":"2022-08-26T05:50:28.109Z","dependency_job_id":null,"html_url":"https://github.com/jkpang/PPNetworkHelper","commit_stats":null,"previous_names":[],"tags_count":14,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jkpang%2FPPNetworkHelper","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jkpang%2FPPNetworkHelper/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jkpang%2FPPNetworkHelper/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jkpang%2FPPNetworkHelper/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jkpang","download_url":"https://codeload.github.com/jkpang/PPNetworkHelper/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":234555970,"owners_count":18851880,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["afnetworking","cache","cocoapods","ios","objective-c","yycache"],"created_at":"2024-09-26T02:45:42.588Z","updated_at":"2025-09-28T19:32:09.060Z","avatar_url":"https://github.com/jkpang.png","language":"Objective-C","funding_links":[],"categories":[],"sub_categories":[],"readme":"![image](https://github.com/jkpang/PPNetworkHelper/blob/master/Picture/PPNetworkHelper.png)\n\n![](https://img.shields.io/badge/platform-iOS-red.svg) ![](https://img.shields.io/badge/language-Objective--C-orange.svg) ![](https://img.shields.io/cocoapods/v/PPNetworkHelper.svg?style=flat) ![](https://img.shields.io/cocoapods/dt/PPNetworkHelper.svg\n) ![](https://img.shields.io/badge/license-MIT%20License-brightgreen.svg)  [![](https://img.shields.io/badge/weibo-jkpang--%E5%BA%9E-red.svg)](http://weibo.com/5743737098/profile?rightmod=1\u0026wvr=6\u0026mod=personinfo\u0026is_all=1)\n\n对AFNetworking 3.x 与YYCache的二次封装,封装常见的GET、POST、文件上传/下载、网络状态监测的功能、方法接口简洁明了,并结合YYCache实现对网络数据的缓存,简单易用,不用再写FMDB那烦人的SQL语句,一句代码搞定网络数据的请求与缓存. \n无需设置,无需插件,控制台可直接打印json中文字符,调试更方便\n\n### 新建 PP-iOS学习交流群 : 323408051 有关于PP系列封装的问题和iOS技术可以在此群讨论\n\n[简书地址](http://www.jianshu.com/p/c695d20d95cb) ;\n\n![image](https://github.com/jkpang/PPNetworkHelper/blob/master/Picture/network.gif)\n\n## Requirements 要求\n* iOS 7+\n* Xcode 8+\n\n## Installation 安装\n### 1.手动安装:\n`下载DEMO后,将子文件夹PPNetworkHelper拖入到项目中, 导入头文件PPNetworkHelper.h开始使用, 注意: 项目中需要有AFN3.x , YYCache第三方库! 在工程中链接sqlite3依赖库`\n### 2.CocoaPods安装:\nfirst\n`pod 'PPNetworkHelper',:git =\u003e 'https://github.com/jkpang/PPNetworkHelper.git'`\nthen\n`pod install或pod install --no-repo-update`\n\n如果发现pod search PPNetworkHelper 不是最新版本，在终端执行pod setup命令更新本地spec镜像缓存(时间可能有点长),重新搜索就OK了\n## Usage 使用方法\n### 1. 无自动缓存(GET与POST请求用法相同)\n#### 1.1 无缓存\n```objc\n[PPNetworkHelper GET:url parameters:nil success:^(id responseObject) {\n        //请求成功\n    } failure:^(NSError *error) {\n        //请求失败\n}];\n```\n#### 1.2 无缓存,手动缓存\n\n```objc\n[PPNetworkHelper GET:url parameters:nil success:^(id responseObject) {\n    //请求成功\n        //手动缓存\n    [PPNetworkCache setHttpCache:responseObject URL:url parameters:parameters];\n    } failure:^(NSError *error) {\n    //请求失败\n}];\n```\n### 2. 自动缓存(GET与POST请求用法相同)\n\n```objc\n[PPNetworkHelper GET:url parameters:nil responseCache:^(id responseCache) {\n        //加载缓存数据\n    } success:^(id responseObject) {\n        //请求成功\n    } failure:^(NSError *error) {\n        //请求失败\n}];\n```\n### 3.单/多图片上传\n\n```objc\n[PPNetworkHelper uploadImagesWithURL:url\n                    \tparameters:@{@\"参数\":@\"参数\"}\n                        \timages:@[@\"UIImage数组\"]\n                          name:@\"文件对应服务器上的字段\"\n                      fileNames:@\"文件名称数组\"\n                      imageType:@\"图片的类型,png,jpeg\" \n                      imageScale:@\"图片文件压缩比 范围 (0.f ~ 1.f)\"\n                      progress:^(NSProgress *progress) {\n                          //上传进度\n                          NSLog(@\"上传进度:%.2f%%\",100.0 * progress.completedUnitCount/progress.totalUnitCount);\n                      } success:^(id responseObject) {\n                         //上传成功\n                      } failure:^(NSError *error) {\n                        //上传失败\n}];\n\n```\n### 4.文件上传\n```objc\n[PPNetworkHelper uploadFileWithURL:url\n                    parameters:@{@\"参数\":@\"参数\"}\n                          name:@\"文件对应服务器上的字段\"\n                      filePath:@\"文件本地的沙盒路径\"\n                      progress:^(NSProgress *progress) {\n                          //上传进度\n                          NSLog(@\"上传进度:%.2f%%\",100.0 * progress.completedUnitCount/progress.totalUnitCount);\n                      } success:^(id responseObject) {\n                         //上传成功\n                      } failure:^(NSError *error) {\n                        //上传失败\n}];\n\n```\n### 5.文件下载\n\n```objc\nNSURLSessionTask *task = [PPNetworkHelper downloadWithURL:url fileDir:@\"下载至沙盒中的制定文件夹(默认为Download)\" progress:^(NSProgress *progress) {\n        //下载进度,如果要配合UI进度条显示,必须在主线程更新UI\n        NSLog(@\"下载进度:%.2f%%\",100.0 * progress.completedUnitCount/progress.totalUnitCount);\n    } success:^(NSString *filePath) {\n        //下载成功\n    } failure:^(NSError *error) {\n        //下载失败\n}];\n    \n//暂停下载,暂不支持断点下载\n[task suspend];\n//开始下载\n[task resume];\n```\n### 6.网络状态监测\n\n```objc\n// 1.实时获取网络状态,通过Block回调实时获取(此方法可多次调用)\n[PPNetworkHelper networkStatusWithBlock:^(PPNetworkStatus status) {\n   switch (status) {\n       case PPNetworkStatusUnknown:          //未知网络\n           break;\n       case PPNetworkStatusNotReachable:    //无网络\n           break;\n       case PPNetworkStatusReachableViaWWAN://手机网络\n           break;\n       case PPNetworkStatusReachableViaWiFi://WIFI\n           break;\n   }\n}];\n    \n// 2.一次性获取当前网络状态\nif (kIsNetwork) {          \n   NSLog(@\"有网络\");\n   if (kIsWWANNetwork) {                    \n       NSLog(@\"手机网络\");\n   }else if (kIsWiFiNetwork){\n       NSLog(@\"WiFi网络\");\n   }\n} else {\n   NSLog(@\"无网络\");\n}\n```\n### 7. 网络缓存\n#### 7.1 自动缓存的逻辑\n\n**1.从本地获取缓存(不管有无数据) --\u003e 2.请求服务器数据 --\u003e 3.更新本地数据**\n\n#### 7.2 获取缓存总大小\n```objc\nNSInteger totalBytes = [PPNetworkCache getAllHttpCacheSize];\nNSLog(@\"网络缓存大小cache = %.2fMB\",totalBytes/1024/1024.f);\n```\n#### 7.3 删除所有缓存\n\n```objc\n[PPNetworkCache removeAllHttpCache];\n```\n### 8.网络参数设置(附说明)\n\n```objc\n/*\n **************************************  说明  **********************************************\n *\n * 在一开始设计接口的时候就想着方法接口越少越好,越简单越好,只有GET,POST,上传,下载,监测网络状态就够了.\n *\n * 无奈的是在实际开发中,每个APP与后台服务器的数据交互都有不同的请求格式,如果要修改请求格式,就要在此封装\n * 内修改,再加上此封装在支持CocoaPods后,如果使用者pod update最新PPNetworkHelper,那又要重新修改此\n * 封装内的相关参数.\n *\n * 依个人经验,在项目的开发中,一般都会将网络请求部分封装 2~3 层,第2层配置好网络请求工具的在本项目中的各项\n * 参数,其暴露出的方法接口只需留出请求URL与参数的入口就行,第3层就是对整个项目请求API的封装,其对外暴露出的\n * 的方法接口只留出请求参数的入口.这样如果以后项目要更换网络请求库或者修改请求URL,在单个文件内完成配置就好\n * 了,大大降低了项目的后期维护难度\n *\n * 综上所述,最终还是将设置参数的接口暴露出来,如果通过CocoaPods方式使用PPNetworkHelper,在设置项目网络\n * 请求参数的时候,强烈建议开发者在此基础上再封装一层,通过以下方法配置好各种参数与请求的URL,便于维护\n *\n **************************************  说明  **********************************************\n */\n\n#pragma mark - 重置AFHTTPSessionManager相关属性\n/**\n *  设置网络请求参数的格式:默认为二进制格式\n *\n *  @param requestSerializer PPRequestSerializerJSON(JSON格式),PPRequestSerializerHTTP(二进制格式),\n */\n+ (void)setRequestSerializer:(PPRequestSerializer)requestSerializer;\n\n/**\n *  设置服务器响应数据格式:默认为JSON格式\n *\n *  @param responseSerializer PPResponseSerializerJSON(JSON格式),PPResponseSerializerHTTP(二进制格式)\n */\n+ (void)setResponseSerializer:(PPResponseSerializer)responseSerializer;\n\n/**\n *  设置请求超时时间:默认为30S\n *\n *  @param time 时长\n */\n+ (void)setRequestTimeoutInterval:(NSTimeInterval)time;\n\n/**\n *  设置请求头\n */\n+ (void)setValue:(NSString *)value forHTTPHeaderField:(NSString *)field;\n\n/**\n *  是否打开网络状态转圈菊花:默认打开\n *\n *  @param open YES(打开), NO(关闭)\n */\n+ (void)openNetworkActivityIndicator:(BOOL)open;\n\n/**\n 配置自建证书的Https请求, 参考链接: http://blog.csdn.net/syg90178aw/article/details/52839103\n\n @param cerPath 自建Https证书的路径\n @param validatesDomainName 是否需要验证域名，默认为YES. 如果证书的域名与请求的域名不一致，需设置为NO; 即服务器使用其他可信任机构颁发\n        的证书，也可以建立连接，这个非常危险, 建议打开.validatesDomainName=NO, 主要用于这种情况:客户端请求的是子域名, 而证书上的是另外\n        一个域名。因为SSL证书上的域名是独立的,假如证书上注册的域名是www.google.com, 那么mail.google.com是无法验证通过的.\n */\n+ (void)setSecurityPolicyWithCerPath:(NSString *)cerPath validatesDomainName:(BOOL)validatesDomainName;\n```\n\nPPNetworkHelper全部以类方法调用,使用简单,麻麻再也不用担心我一句一句地写SQLite啦~~~如果你有更好的建议,希望不吝赐教!\n### 你的star是我持续更新的动力!\n===\n## CocoaPods更新日志\n\n```\n• 2017.04.10(tag:0.8.0):\n  1.新增 + (void)setAFHTTPSessionManagerProperty方法,可获得AFHTTPSessionManager实例进行相关设置;\n  2.关闭日志状态下彻底关闭日志的打印;\n  3.Demo中增加对项目中网络层的构建,抛砖引玉,在工程的PPHTTPRequestLayer文件夹可以看到;\n  \n• 2017.02.15(tag:0.7.0):\n  1.新增 日志打印打开/关闭接口;\n  2.修复 单/多图上传BUG;\n  3.优化代码规范;\n\n• 2017.02.06(tag:0.6.0):\n  1.重构 \"单/多图片上传\"部分\n  2.新增 \"上传文件接口\n\n• 2017.01.02(tag:0.5.0):\n  1.添加配置自建证书的Https请求的接口;\n  2.修复一次性网络判断需要先调网络监测方法才能生效的BUG, 现在可直接调用一次性网络判断即可生效!\n  3.修改在POST请求时,请求参数的默认格式二进制(之前是JSON格式),**注意,如果有同学在升级此版本后导致获取不到服务器数据,请将设置请求参数格式的代码注释掉即可!\n  4.将NetworkStatu--\u003ePPNetworkStatus, 避免与其他第三方库产生冲突!\n  5.修改缓存的读取为异步读取,不会阻塞主线程;\n  6.其他一些代码优化与修改.\n\n• 2016.11.22(tag:0.4.0):\n  1.一次性判断当前网络状态值更加准确;\n  2.添加手机网络,WiFi的当前网络状态.\n    \n• 2016.11.18(tag:0.3.1):\n  1.新增取消所有http请求;\n  2.新增取消指定URL请求 的方法.\n    \n• 2016.09.26(tag:0.3.0): 控制台直接打印json中文字符,无需插件\n• 2016.09.18(tag:0.2.5): \n  1.支持单个页面的多级数据缓存;\n  2.简化网络状态监测的方法调用\n  \n• 2016.09.12(tag:0.2.1): 小细节优化\n• 2016.09.10(tag:0.2.0): 增加网络请求设置接口(详情见:7.网络参数设置)\n• 2016.09.06(tag:0.1.2): 修复在无网络进行下载时,会触发下载成功回调的Bug.\n• 2016.09.05(tag:0.1.1): 多个请求的情况下采取一个共享的AFHTTPSessionManager;\n• 2016.08.26(tag:0.1.0): 初始化到CocoaPods;\n```\n\n## 我的App\n- [PPHub](https://github.com/jkpang/PPHub-Feedback)：一个简洁漂亮的 GitHub iOS客户端   \n[![App_Store](https://github.com/jkpang/PPHub-Feedback/blob/master/Resource/Download_on_the_App_Store_135x40.svg)](https://itunes.apple.com/cn/app/PPHub%20For%20GitHub/id1314212521?mt=8)\n\n## 联系方式:\n* Weibo : [@jkpang-庞](http://weibo.com/5743737098/profile?rightmod=1\u0026wvr=6\u0026mod=personinfo\u0026is_all=1)\n* Email : jkpang@outlook.com\n* QQ群 : 323408051\n* Blog  : https://www.jkpang.cn\n\n![PP-iOS学习交流群群二维码](https://github.com/jkpang/PPCounter/blob/master/PP-iOS%E5%AD%A6%E4%B9%A0%E4%BA%A4%E6%B5%81%E7%BE%A4%E7%BE%A4%E4%BA%8C%E7%BB%B4%E7%A0%81.png)\n\n## 许可证\nPPNetworkHelper 使用 MIT 许可证，详情见 LICENSE 文件。\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjkpang%2Fppnetworkhelper","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjkpang%2Fppnetworkhelper","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjkpang%2Fppnetworkhelper/lists"}