AFHTTPSessionManager *manager =[AFHTTPSessionManager manager];
[manager GET:@"http://www.baidu.com" parameters:nil success:^(NSURLSessionDataTask *task, id responseObject) { NSString *result = [[NSString alloc]initWithData:responseObject encoding:NSUTF8StringEncoding]; NSLog(@"%@",result); } failure:^(NSURLSessionDataTask *task, NSError *error) { NSLog(@"%@",error); }];
在AFNetworking中 上述代碼將會 輸出
Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)" (JSON text did not start with array or object and option to allow fragments not set.) UserInfo=0x8ea19a0 {NSDebugDescription=JSON text did not start with array or object and option to allow fragments not set.}
這是因為 AFNetworking默認把響應結果當成json來處理,(默認manager.responseSerializer = [AFJSONResponseSerializer serializer]) ,很顯然,我們請求的百度首頁 返回的並不是一個json文本,而是一個html網頁,但是AFNetworking並不知道,它堅信請求的結果就是一個json文本!然后固執地以json的形式去解析,顯然沒辦法把一個網頁解析成一個字典或者數組,所以產生了上述錯誤.
然而,我們期望它能夠正確地處理這個情形,而不是提示一個錯誤.
這時候 你必須告訴AFNetworking:別把這個網頁當json來處理!
只需要在發送請求前加入:manager.responseSerializer = [AFHTTPResponseSerializer serializer]
代碼變成:
AFHTTPSessionManager *manager =[AFHTTPSessionManager manager];
manager.responseSerializer = [AFHTTPResponseSerializer serializer]; [manager GET:@"http://www.baidu.com" parameters:nil success:^(NSURLSessionDataTask *task, id responseObject) { NSString *result = [[NSString alloc]initWithData:responseObject encoding:NSUTF8StringEncoding]; NSLog(@"%@",result); } failure:^(NSURLSessionDataTask *task, NSError *error) { NSLog(@"%@",error); }];
這樣,就可以正確地把baidu.com首頁的html源碼抓回來啦.