iOS簡(jiǎn)易封裝網(wǎng)絡(luò)請(qǐng)求

學(xué)而時(shí)習(xí)之雀鹃,不亦樂(lè)乎,大家好励两,我是張杰黎茎。

iOS開(kāi)發(fā)做久了不免就是復(fù)制了黏貼了,代碼積累多了就不想敲了当悔,高級(jí)一點(diǎn)的對(duì)UI也做了不少輪子傅瞻。下面要寫的不是UI輪子踢代,是簡(jiǎn)單的網(wǎng)絡(luò)請(qǐng)求的封裝。

一般網(wǎng)絡(luò)請(qǐng)求的封裝分為兩種:
一嗅骄、iOS原生NSURLSession以及NSURLConnection(NSURLConnection已經(jīng)被廢棄胳挎,我們就不多說(shuō)了)。NSURLSession 下面這篇講的不錯(cuò)溺森,我自認(rèn)為沒(méi)人家講的精辟慕爬,怕誤導(dǎo)讀者,故引用之屏积。
http://www.reibang.com/p/158e2a8c545e

二医窿、網(wǎng)絡(luò)請(qǐng)求封裝或者說(shuō)用的最多的 AFNetworking,也是基于iOS原生請(qǐng)求NSURLSession封裝而來(lái)的炊林。用法也很簡(jiǎn)單姥卢。但是我們的APP網(wǎng)絡(luò)請(qǐng)求很多,每次都去寫一遍請(qǐng)求頭之類過(guò)于繁瑣渣聚。下面是我自己封裝的隔显,個(gè)人認(rèn)為簡(jiǎn)單明了,便于使用饵逐。

JsonAFNetworking.h

//
//  JsonAFNetworking.h
//
//  Created by Admin on 2019/8/15.
//  Copyright ? 2019 zhangjie. All rights reserved.
//

#import <Foundation/Foundation.h>


@interface JsonAFNetworking : NSObject

+ (instancetype)sharedInstance;

 /**
 *  發(fā)送get請(qǐng)求
 *
 *  @param URLString  請(qǐng)求的網(wǎng)址字符串
 *  @param parameters 請(qǐng)求的參數(shù)
 *  @param success    請(qǐng)求成功的回調(diào)
 *  @param failure    請(qǐng)求失敗的回調(diào)
 */
- (void)getWithURLString:(NSString *)URLString
          parameters:(id)parameters
             success:(void (^)(id responseObject))success
             failure:(void (^)(NSError *error))failure;

/**
 *  發(fā)送post請(qǐng)求
 *
 *  @param URLString  請(qǐng)求的網(wǎng)址字符串
 *  @param parameters 請(qǐng)求的參數(shù)
 *  @param success    請(qǐng)求成功的回調(diào)
 *  @param failure    請(qǐng)求失敗的回調(diào)
 */
- (void)postWithURLString:(NSString *)URLString
           parameters:(id)parameters
              success:(void (^)(id responseObject))success
              failure:(void (^)(NSError *error))failure;

@end

JsonAFNetworking.m

//
//  JsonAFNetworking.m
//
//  Created by Admin on 2019/8/15.
//  Copyright ? 2019 zhangjie. All rights reserved.
//

#import "JsonAFNetworking.h"
#import "AFNetworking.h"
#import "MBProgressHUD+NJ.h"

@implementation JsonAFNetworking

static id _instance = nil;
+ (instancetype)sharedInstance {
    return [[self alloc] init];
}

+ (instancetype)allocWithZone:(struct _NSZone *)zone {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
    _instance = [super allocWithZone:zone];
});
return _instance;
}

- (instancetype)init {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
    _instance = [super init];
});
return _instance;
}

#pragma mark -- GET請(qǐng)求 --
- (void)getWithURLString:(NSString *)URLString
          parameters:(id)parameters
             success:(void (^)(id))success
             failure:(void (^)(NSError *))failure {

NSString *token = [NSString stringWithFormat:@"%@",[[NSUserDefaults standardUserDefaults] objectForKey:@"token"]];
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.requestSerializer = [AFJSONRequestSerializer serializer];
manager.responseSerializer.acceptableContentTypes = nil;
if ([[NSUserDefaults standardUserDefaults] objectForKey:@"token"]) {
    [manager.requestSerializer setValue:token forHTTPHeaderField:@"RUICHAOSESSIONID"];
}

[manager GET:URLString parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
    if (success) {
        NSLog(@"URL =====  %@",task.originalRequest.URL);
        NSLog(@" =====  %@",task.originalRequest.HTTPMethod);
        NSLog(@" =====  %@",task.originalRequest.allHTTPHeaderFields);
        NSLog(@"Head=====  %@",task.originalRequest.allHTTPHeaderFields);
        NSLog(@"Param=====  %@",parameters);
        success(responseObject);
    }
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
    if (failure) {
        NSLog(@"URL =====  %@",task.originalRequest.URL);
        NSLog(@" =====  %@",task.originalRequest.HTTPMethod);
        NSLog(@" =====  %@",task.originalRequest.allHTTPHeaderFields);
        NSLog(@"Head=====  %@",task.originalRequest.allHTTPHeaderFields);
        NSLog(@"Param=====  %@",parameters);
        NSHTTPURLResponse * responses = (NSHTTPURLResponse *)task.response;
                   NSLog(@"%ld",(long)responses.statusCode);
        if (responses.statusCode == 401) {
            [MBProgressHUD hideHUD];
            [self showLogin];
        }else{
           failure(error);
        }
    }
}];
}

#pragma mark -- POST請(qǐng)求 --
- (void)postWithURLString:(NSString *)URLString
           parameters:(id)parameters
              success:(void (^)(id))success
              failure:(void (^)(NSError *))failure {

NSString *token = [NSString stringWithFormat:@"%@",[[NSUserDefaults standardUserDefaults] objectForKey:@"token"]];
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.requestSerializer = [AFJSONRequestSerializer serializer];
manager.responseSerializer.acceptableContentTypes = nil;
if ([[NSUserDefaults standardUserDefaults] objectForKey:@"token"]) {
    [manager.requestSerializer setValue:token forHTTPHeaderField:@"RUICHAOSESSIONID"];
}
[manager POST:URLString parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
    if (success) {
        NSLog(@"URL =====  %@",task.originalRequest.URL);
        NSLog(@"HTTPMethod=====  %@",task.originalRequest.HTTPMethod);
        NSLog(@"Head=====  %@",task.originalRequest.allHTTPHeaderFields);
        NSLog(@"Param=====  %@",parameters);
        success(responseObject);
    }
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
    if (failure) {
        NSLog(@"URL =====  %@",task.originalRequest.URL);
        NSLog(@" =====  %@",task.originalRequest.HTTPMethod);
        NSLog(@" =====  %@",task.originalRequest.allHTTPHeaderFields);
        NSLog(@"Head=====  %@",task.originalRequest.allHTTPHeaderFields);
        NSLog(@"Param=====  %@",parameters);
        NSHTTPURLResponse * responses = (NSHTTPURLResponse *)task.response;
                   NSLog(@"%ld",(long)responses.statusCode);
        if (responses.statusCode == 401) {
            [MBProgressHUD hideHUD];
            [self showLogin];
        }else{
           failure(error);
        }
    }
}];
}

//處理異地登錄
-(void)showLogin{
UIAlertController * alertController = [UIAlertController alertControllerWithTitle: nil                                                                             message: @"當(dāng)前賬號(hào)在其他地方登錄"                                                                       preferredStyle:UIAlertControllerStyleAlert];
//添加Button
[alertController addAction: [UIAlertAction actionWithTitle: @"重新登錄" style: UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
    //處理點(diǎn)擊拍照
    UIStoryboard *mainSB = [UIStoryboard storyboardWithName:@"login" bundle:nil];
    UITabBarController *mian = [mainSB instantiateViewControllerWithIdentifier:@"login"];
    [UIApplication sharedApplication].keyWindow.rootViewController = mian;
    
}]];
[[UIApplication sharedApplication].keyWindow.rootViewController presentViewController: alertController animated: YES completion: nil];
}


@end

使用起來(lái)很簡(jiǎn)單括眠,打印的信息也很齊全,請(qǐng)求頭倍权,請(qǐng)求參數(shù)掷豺,請(qǐng)求地址等一目了然。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末薄声,一起剝皮案震驚了整個(gè)濱河市当船,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌默辨,老刑警劉巖德频,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異缩幸,居然都是意外死亡壹置,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門表谊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)钞护,“玉大人,你說(shuō)我怎么就攤上這事爆办∧压荆” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)余佃。 經(jīng)常有香客問(wèn)我暮刃,道長(zhǎng),這世上最難降的妖魔是什么爆土? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任椭懊,我火速辦了婚禮,結(jié)果婚禮上雾消,老公的妹妹穿的比我還像新娘灾搏。我一直安慰自己,他們只是感情好立润,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布狂窑。 她就那樣靜靜地躺著,像睡著了一般桑腮。 火紅的嫁衣襯著肌膚如雪泉哈。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,125評(píng)論 1 297
  • 那天破讨,我揣著相機(jī)與錄音丛晦,去河邊找鬼。 笑死提陶,一個(gè)胖子當(dāng)著我的面吹牛烫沙,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播隙笆,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼锌蓄,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了撑柔?” 一聲冷哼從身側(cè)響起瘸爽,我...
    開(kāi)封第一講書(shū)人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎铅忿,沒(méi)想到半個(gè)月后剪决,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡檀训,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年柑潦,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肢扯。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡妒茬,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蔚晨,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布铭腕,位于F島的核電站银择,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏累舷。R本人自食惡果不足惜浩考,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望被盈。 院中可真熱鬧析孽,春花似錦、人聲如沸只怎。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)身堡。三九已至邓尤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間贴谎,已是汗流浹背汞扎。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留擅这,地道東北人澈魄。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像仲翎,于是被迫代替她去往敵國(guó)和親痹扇。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353