前言
最近攝像頭直播的隱私安全問題頗受關(guān)注,各種隱私暴露的傳聞不絕于耳,據(jù)說都驚動了新聞聯(lián)播。而我們公司作為其中一員,難免受到了波及,于是領(lǐng)導(dǎo)召集速速開會:視頻流有木有加密,上行通道有木有,下行通道有木有加密,賬號有木有被盜的可能,有木有被抓包的可能。。。最后的結(jié)果是,新的需求,在登錄注冊模塊加登錄錯誤次數(shù)限制和圖片驗證碼驗證流程。。。
正文
閑話少說。
這次的需求在做接口測試時發(fā)現(xiàn)點小問題,請求下來的圖片驗證碼總是驗證不通過,后臺返回驗證碼錯誤。好了,又到了發(fā)揮交流能力的時候了。把相關(guān)數(shù)據(jù)發(fā)給后臺兄弟,后臺兄弟巴拉巴拉巴拉一頓查,然后告訴我請求圖片驗證碼地址的UA(User-Agent)跟下載圖片的UA不同,導(dǎo)致驗證失敗。
UA不同?我們的網(wǎng)絡(luò)請求用的AFNetWorking框架,而圖片用的SDWebImage。我們的網(wǎng)絡(luò)層對AF做了一層封裝,設(shè)置了特定的請求頭,而SD并沒有專門設(shè)置過,因為之前并沒有想到圖片也會驗證請求頭信息。好了,問題找到,那就好解決了。Just show the code。
這是設(shè)置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;
}
結(jié)語
公司什么時候才能來個做開發(fā)的妹子呢?