談談網(wǎng)絡請求

AFN (AFNetworking)

網(wǎng)絡請求中, 使用最多的就是AFNetworking框架, AFNetworking是一個輕量級的iOS網(wǎng)絡通信類庫峡迷。它建立在NSURLConnection和ios 7.0 后推出的NSURLSession等類庫的基礎上,讓很多網(wǎng)絡通信功能的實現(xiàn)變得十分簡單。它支持HTTP請求和基于REST的網(wǎng)絡服務(包括GET、POST、 PUT等)伍掀。支持ARC。 使用AFN的經(jīng)常會遇到以下錯誤, 導致請求或者響應失敗, 主要原因就在于AFN請求和響應的默認的數(shù)據(jù)解析格式, 如果與默認的不一致就會發(fā)生解析錯誤, 導致請求和響應失敗

1.response響應

response響應,默認會把數(shù)據(jù)轉成JSON格式, 如果服務器返回的是JSON格式的還好, 如果 返回的是html, 字符串等等格式, 就不能用response的默認格式, 讓返回數(shù)據(jù)是什么格式就呈現(xiàn)什么格式, 但是二進制數(shù)據(jù)沒法看懂, 需要轉為了字符串, alloc,initWithData..

  • 響應錯誤的解決辦法如下:

.

simple demo:

.

//請求百度, 常見錯誤
- (void)demo{
    
    //用自定義的繼承自AFHTTPSessionManager的類   創(chuàng)建 NSURLSession的管理者
    NetWorkTools * netWorkTool = [NetWorkTools sharedNetWorkTools];
    
    /**
     響應回來,默認的序列化方法是 JSON
        不使用默認的數(shù)列化方式, 采用普通的序列化方式, 返回二進制
     html
     */
    netWorkTool.responseSerializer = [AFHTTPResponseSerializer serializer];
    
    //發(fā)送請求
    [netWorkTool GET:@"http://www.baidu.com" parameters:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nonnull responseObject) {
        NSLog(@"%@--%@",responseObject,[responseObject class]);
        
        //將服務器返回回來的二進制數(shù)據(jù)轉化為html,也就是字符串
        NSString * html = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
        
        NSLog(@"html = %@",html);
        
    } failure:^(NSURLSessionDataTask * _Nonnull task, NSError * _Nonnull error) {
        
        NSLog(@"%@",error.localizedDescription);
    }];
}

//  NetWorkTools.m

#import "NetWorkTools.h"

static NSString * const BASEURL = @"";

@implementation NetWorkTools

//定義靜態(tài)的,全局都可以使用
static NetWorkTools * _netWorkTools;

+ (instancetype)sharedNetWorkTools{

    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        
        _netWorkTools = [[self alloc] initWithBaseURL:[NSURL URLWithString: BASEURL]];
        
        _netWorkTools.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/html",@"text/plain", nil];
    });
    
    return _netWorkTools;
}

@end

.

2.request請求

request請求, 默認的會把數(shù)據(jù)轉為NSData, 但是服務器只能接受JSON格式的數(shù)據(jù), 才能進行反序列化, 因為后臺php只接受JSON格式數(shù)據(jù), 所以不能使用request默認的格式, 需要轉化為服務器接受的JSON格式

請求錯誤的解決辦法如下:


.

simple demo

.
//POST JSON
- (void)demo1{

    //POST請求,發(fā)送數(shù)據(jù)給服務器,交互時, 由于后臺php語言只接受JSON格式的數(shù)據(jù),那什么樣的數(shù)據(jù)可以轉為JSON格式呢?
    //1.頂部節(jié)點是 字典 或者 數(shù)組
    //2.普通的字符串
    //3.自定義的類, 需要模型轉字典,KVC, 然后才能轉為JSON格式
    
    //自定義的類 創(chuàng)建 一個session的管理者
    NetWorkTools * netWorkTool = [NetWorkTools sharedNetWorkTools];
    
    //發(fā)送的參數(shù)是普通的字符串, 這種攜帶用戶信息的參數(shù), 最好使用POST方式request,不會緩存, 也沒有長度限制, 并且不會放在URL后面相對安全
    NSDictionary * params = @{
                              @"username":@"abc",
                              @"password":@"123"
                              };
    
    //由于服務器后臺語言是php, 只接受JSON格式, 才會進行序列化解析
    netWorkTool.requestSerializer = [AFJSONRequestSerializer serializer];

    //服務器返回的是純凈的二進制
    netWorkTool.responseSerializer = [AFHTTPResponseSerializer serializer];
    
    //需要提交數(shù)據(jù)給服務器, 需要進行交互的 用POST
    [netWorkTool POST:@"http://localhost/post/postjson.php" parameters:params success:^(NSURLSessionDataTask * _Nonnull task, id  _Nonnull responseObject) {
        
        NSLog(@"%@--%@",responseObject,[responseObject class]);
        
        //將服務器返回的二進制轉為 text/plain
        NSString * result = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
        NSLog(@"result = %@",result);
        
    } failure:^(NSURLSessionDataTask * _Nonnull task, NSError * _Nonnull error) {
        
        NSLog(@"%@",error.localizedDescription);
    }];
}

#import "NetWorkTools.h"

static NSString * const BASEURL = @"";

@implementation NetWorkTools

//定義靜態(tài)的,全局都可以使用
static NetWorkTools * _netWorkTools;

+ (instancetype)sharedNetWorkTools{

    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        
        _netWorkTools = [[self alloc] initWithBaseURL:[NSURL URLWithString: BASEURL]];
        
        _netWorkTools.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/html",@"text/plain", nil];
    });
    
    return _netWorkTools;
}

@end

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末翎承,一起剝皮案震驚了整個濱河市硕盹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌叨咖,老刑警劉巖瘩例,帶你破解...
    沈念sama閱讀 221,430評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異甸各,居然都是意外死亡垛贤,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評論 3 398
  • 文/潘曉璐 我一進店門趣倾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來聘惦,“玉大人,你說我怎么就攤上這事儒恋∩埔铮” “怎么了?”我有些...
    開封第一講書人閱讀 167,834評論 0 360
  • 文/不壞的土叔 我叫張陵诫尽,是天一觀的道長禀酱。 經(jīng)常有香客問我,道長牧嫉,這世上最難降的妖魔是什么剂跟? 我笑而不...
    開封第一講書人閱讀 59,543評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮酣藻,結果婚禮上曹洽,老公的妹妹穿的比我還像新娘。我一直安慰自己辽剧,他們只是感情好送淆,可當我...
    茶點故事閱讀 68,547評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著怕轿,像睡著了一般偷崩。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上撤卢,一...
    開封第一講書人閱讀 52,196評論 1 308
  • 那天环凿,我揣著相機與錄音,去河邊找鬼放吩。 笑死智听,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播到推,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼考赛,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了莉测?” 一聲冷哼從身側響起颜骤,我...
    開封第一講書人閱讀 39,671評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎捣卤,沒想到半個月后忍抽,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,221評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡董朝,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,303評論 3 340
  • 正文 我和宋清朗相戀三年鸠项,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片子姜。...
    茶點故事閱讀 40,444評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡祟绊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出哥捕,到底是詐尸還是另有隱情牧抽,我是刑警寧澤,帶...
    沈念sama閱讀 36,134評論 5 350
  • 正文 年R本政府宣布遥赚,位于F島的核電站扬舒,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏鸽捻。R本人自食惡果不足惜呼巴,卻給世界環(huán)境...
    茶點故事閱讀 41,810評論 3 333
  • 文/蒙蒙 一泽腮、第九天 我趴在偏房一處隱蔽的房頂上張望御蒲。 院中可真熱鬧,春花似錦诊赊、人聲如沸厚满。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,285評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽碘箍。三九已至,卻和暖如春鲸郊,著一層夾襖步出監(jiān)牢的瞬間丰榴,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,399評論 1 272
  • 我被黑心中介騙來泰國打工秆撮, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留四濒,地道東北人。 一個月前我還...
    沈念sama閱讀 48,837評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像盗蟆,于是被迫代替她去往敵國和親戈二。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,455評論 2 359

推薦閱讀更多精彩內(nèi)容