前言
最近摄像头直播的隐私安全问题颇受关注,各种隐私暴露的传闻不绝于耳,据说都惊动了新闻联播。而我们公司作为其中一员,难免受到了波及,于是领导召集速速开会:视频流有木有加密,上行通道有木有,下行通道有木有加密,账号有木有被盗的可能,有木有被抓包的可能。。。最后的结果是,新的需求,在登录注册模块加登录错误次数限制和图片验证码验证流程。。。
正文
闲话少说。
这次的需求在做接口测试时发现点小问题,请求下来的图片验证码总是验证不通过,后台返回验证码错误。好了,又到了发挥交流能力的时候了。把相关数据发给后台兄弟,后台兄弟巴拉巴拉巴拉一顿查,然后告诉我请求图片验证码地址的UA(User-Agent)跟下载图片的UA不同,导致验证失败。
UA不同?我们的网络请求用的AFNetWorking框架,而图片用的SDWebImage。我们的网络层对AF做了一层封装,设置了特定的请求头,而SD并没有专门设置过,因为之前并没有想到图片也会验证请求头信息。好了,问题找到,那就好解决了。Just show the code。
这是设置AF请求头的:
[_httpSessionManager.requestSerializer setValue:[self userAgent] forHTTPHeaderField:@"User-Agent"];
SD也加上:
[[SDWebImageManager sharedManager].imageDownloader setValue:[self userAgent] forHTTPHeaderField:@"User-Agent"];
这是我们的User-Agent:
- (NSString *)userAgent {
NSString *appName = [[[NSBundle mainBundle] infoDictionary] objectForKey:(__bridge NSString *)kCFBundleExecutableKey] ?: [[[NSBundle mainBundle] infoDictionary] objectForKey:(__bridge NSString *)kCFBundleIdentifierKey];
NSString *appVersion = IEMIEMAPPBUILDVERSION;
NSString *platform = stringFromDeviceVersion([SDVersion deviceVersion]);
NSString *systemVersion = [[UIDevice currentDevice] systemVersion];
NSString *userAgent =
[NSString stringWithFormat:@"%@/%@(%@;iOS %@)", appName, appVersion, platform, systemVersion];
return userAgent;
}
结语
公司什么时候才能来个做开发的妹子呢?