iOS網(wǎng)絡(luò)請求AFNetworking

AFNetworking導(dǎo)入工程
網(wǎng)絡(luò)請求類名NetworkTool繼承AFHTTPSessionManager
NetworkTool.h

#import "AFHTTPSessionManager.h"

@interface NetworkTool : AFHTTPSessionManager

/**
 *  網(wǎng)絡(luò)請求工具類全局訪問點(diǎn)
 *
 *  @return AFHTTPSessionManager的實(shí)例
 */
+ (instancetype)sharedNetworkTool;

/**
 *  網(wǎng)絡(luò)請求工具類請求的主方法
 *
 *  @param URLString 請求地址
 *  @param success   成功的回調(diào)
 *  @param failure     失敗的回調(diào)
 */

+ (void)POSTWithURLString:(NSString *)URLString parameters:(NSMutableDictionary *)parameters 
                  success:(void(^)(id responseObject))success faile:(void(^)(NSError *error))failure;


@end

NetworkTool.m

#import "NetworkTool.h"
#import "AFNetworking.h"

@implementation NetworkTool

+ (instancetype)sharedNetworkTool
{
    static NetworkTool *instance;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        // 設(shè)置相對路徑
        NSURL *BaseURL = [NSURL URLWithString:@""];
        // 實(shí)例化Manager
        instance = [[self alloc] initWithBaseURL:BaseURL];
        
        // 增加AFN支持的文件類型
        instance.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", @"text/html", @"text/plain", nil];
    });
    
    return instance;
}

//網(wǎng)絡(luò)請求方法
+ (void)POSTWithURLString:(NSString *)URLString parameters:(NSMutableDictionary *)parameters 
  success:(void(^)(id responseObject))success faile:(void(^)(NSError *error))failure
{
  //大P為key,由接口決定,也可不需要
    NSData *data = [NSJSONSerialization dataWithJSONObject:parameters options:NSJSONWritingPrettyPrinted error:nil];
    NSString *JsonStr=[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
    NSMutableDictionary *parameterDic = [[NSMutableDictionary alloc]init];
    [parameterDic setObject:JsonStr forKey:@"P"];
    
    AFHTTPSessionManager *sessionManager = [AFHTTPSessionManager manager];
    sessionManager.requestSerializer.timeoutInterval = 15.f;
    sessionManager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"];

    [sessionManager POST:URLString parameters:parameterDic progress:^(NSProgress * _Nonnull downloadProgress) {
        
    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        NSLog((@"\n[函數(shù)名:%s]\n" "[行號:%d]\n" "參數(shù)%@\n"), __FUNCTION__, __LINE__,parameters);
        NSLog((@"\n[函數(shù)名:%s]\n" "[行號:%d]\n" "地址%@\n"), __FUNCTION__, __LINE__,URLString);
        NSLog((@"\n[函數(shù)名:%s]\n" "[行號:%d]\n" "返回%@\n"), __FUNCTION__, __LINE__,responseObject);

        success(responseObject);
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        failure(error);
        NSLog((@"該接口返回錯誤==%@\n參數(shù)是==%@\n錯誤是==%@\n"),URLString,parameters,error);
        [self testNetwork];//查詢當(dāng)前網(wǎng)絡(luò)
    }];

}

+(void)testNetwork
{
    // 監(jiān)測網(wǎng)絡(luò)環(huán)境
    AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];
    /*
     status
     AFNetworkReachabilityStatusUnknown          = -1, 不知道監(jiān)測的是什么
     AFNetworkReachabilityStatusNotReachable     = 0,  沒有檢測到網(wǎng)絡(luò)
     AFNetworkReachabilityStatusReachableViaWWAN = 1,  蜂窩網(wǎng)
     AFNetworkReachabilityStatusReachableViaWiFi = 2,  WIFI
     */
    [manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
        if (status == 0) {
            //沒有檢測到網(wǎng)絡(luò)!
        }
    }];
    [manager startMonitoring];
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容