AFN 응용 및 원리

12687 단어 ios네트워크
AFN 프레임 워 크 주의사항 AFN 의 요청 은 기본적으로 바 이 너 리 로 보 내 졌 습 니 다. AFN 의 응답 은 JSON 1 AFN 내부 구조 AFN 구조 체 - NSURLConnection (iOS 9.0 폐기) + AFURLConnection Operation + AFHTTPRequestOperation + AFHTTPRequestOperation (자주 사용 하 는 HTTP 방법 을 봉 인 했 습 니 다)* 속성 * baseURL: AFN 은 개발 자가 AFHTTPRequest OperationManager 에 대해 하나의 예 류 를 사용자 정의 하고 baseURL, 모든 네트워크 접근 을 설정 하 는 것 을 권장 합 니 다.모두 상대 경로 만 사용 하면 됩 니 다 * requestSerializer: 요청 데이터 형식 / 기본 값 은 바 이 너 리 HTTP * response Serializer: 응답 하 는 데이터 형식 / 기본 값 은 JSON 형식 * operation Queue * reakability Manager: 네트워크 연결 관리자 * 방법 * manager: 관리 자 를 만 드 는 데 편리 한 클래스 방법 * HTTP Request Operation With Request: 서버 에 접근 할 때,서버 에 추가 정 보 를 알려 주 려 면 Request 에 * GET * POST 를 설정 해 야 합 니 다.
- NSURLSession
    + AFURLSessionManager
    + AFHTTPSessionManager(       HTTP   )
        * GET
        * POST
        * UIKit + AFNetworking   
        * NSProgress :  KVO

-        &       
     AFURLRequestSerialization :       /       
     AFURLResponseSerialization :       /   JSON  
-     
    +     
        * HTTPS
        * AFSecurityPolicy
    +     
        *                 
        * AFNetworkReachabilityManager

AFN 요청 직렬 화 및 응답 반 직렬 화
      :
        AFHTTPRequestSerializer                       
        AFJSONRequestSerializer JSON               JSON      
        AFPropertyListRequestSerializer      ,       Plist     ,       Android     

      :
    **AFHTTPResponseSerializer       **
    **AFJSONResponseSerializer     ,  JSON            **
    AFXMLParserResponseSerializer  SAX    NSXMLParser(XML  ,    )
    AFXMLDocumentResponseSerializer (Mac OS X) Dom iOS      
    AFPropertyListResponseSerializer       PList
    AFImageResponseSerializer    ,   SDWebImage
    AFCompoundResponseSerializer    

2 AFN 의 기본 사용 GET 요청 발송
- (void)getDemo{
    //1.       
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

    //2.      (GET/POST/PUT/DELETE/HEAD)
    /**   1:         2:  ,get        3:    ,    nil   4:          5:          :  4,  5, AFN         */
    [manager GET:@"http://localhost/demo.json" parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        /**   1:task         2:responseObject      ,             **/
        NSLog(@"%@----%@",responseObject,[responseObject class]);
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        /**   1:task         2:error        **/
        NSLog(@"%@",error);
    }];
}

POST 요청 보 내기
- (void)postDemo{
    //1.       
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

    //2. POST  
    /** POST             AFN  parameters,                      NSString *postParamStr = @"username=zhangsan&password=zhang"; //2.3       request.HTTPBody = [postParamStr dataUsingEncoding:NSUTF8StringEncoding]; */
    NSDictionary *params = @{
                             @"username":@"******",
                             @"password":@"*****"
                             };
    [manager POST:@"http://localhost/login.php" parameters:params progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        NSLog(@"%@",responseObject);
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        NSLog(@"%@",error);
    }];
}

작은 파일 업로드
          :application/octet-stream
- (void)fileUpload{
    //1.     
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

    //2.     POST
    /** parameters      ,          */
    NSDictionary *textDict = @{
                                  @"status":@"       "
                               };
    [manager POST:@"http://localhost/post/upload-m.php" parameters:textDict constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {
        //     ,   formData  

        //1.       
        NSURL *fileURL1 = [[NSBundle mainBundle] URLForResource:@"head1.png" withExtension:nil];

        /**   1:   URL   2:       head1           3:              4:        */
        [formData appendPartWithFileURL:fileURL1 name:@"userfile[]" fileName:@"head1.png" mimeType:@"image/png" error:NULL];

        //2.       
        NSURL *fileURL2 = [[NSBundle mainBundle] URLForResource:@"   .jpg" withExtension:nil];

        NSData *fileData2 = [NSData dataWithContentsOfURL:fileURL2];

        /***   1:         2:       head1           3:              4:        */
        [formData appendPartWithFileData:fileData2 name:@"userfile[]" fileName:@"ymd.jpg" mimeType:@"application/octet-stream"];
    } progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        NSLog(@"%@---%@",responseObject,[responseObject class]);
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        NSLog(@"%@",error);
    }];
}

HTTPS 사이트 방문
- (void)AFNHTTPS{
    //1.       
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

    //AFN 2.5.4
    /** manager.securityPolicy.allowInvalidCertificates = YES; **/

    //AFN 2.6.1      3.0.4,        ,     
    manager.securityPolicy.validatesDomainName = NO;


    //      text/html,          
    manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/html", nil];

    //3.  https://www.XXXX.com      html,               
    manager.responseSerializer = [AFHTTPResponseSerializer serializer];

    //4.    
    [manager GET:@"https://www.XXXX.com" parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        //NSLog(@"%@",responseObject);
        //        
        NSString *html = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];

        NSLog(@"%@",html);
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        NSLog(@"%@",error);
    }];
}

감청 망 상태
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    //1.       
#warning             
// AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager manager];

    AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];

    /** AFNetworkReachabilityStatusUnknown    AFNetworkReachabilityStatusNotReachable      AFNetworkReachabilityStatusReachableViaWWAN      AFNetworkReachabilityStatusReachableViaWiFi WiFi */
    //2.             
    [manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
        NSLog(@"%zd",status);
        if (status==AFNetworkReachabilityStatusReachableViaWWAN) {
            NSLog(@"    ");
        }else if(status==AFNetworkReachabilityStatusReachableViaWiFi){
            NSLog(@"    ");
        }
    }];

    //3.    
    [manager startMonitoring];
}


AFN 의 인 스 턴 스: (json 형식의 내용 을 서버 에 보 내 고 문자열 형식 으로 되 돌려 줍 니 다)
-(void)AFNDemo{
 //1.       
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    //       JSON      
    manager.requestSerializer = [AFJSONRequestSerializer serializer];

    //2.     POST
    /**   parameters {"name":"xiaohua","age":20}; AFN      [NSJSONSerialization dataWithJSONObject:<#(nonnull id)#> options:<#(NSJSONWritingOptions)#> error:<#(NSError * _Nullable __autoreleasing * _Nullable)#>];      JSON       */
    NSDictionary *person = @{
                             @"name":@"kongkong",
                             @"age":@33
                             };
//1,          ,AFN    json,   AFN  text/plain  
 //manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/plain", nil];
 // manager.responseSerializer=[AFJSONRequestSerializer serializer]; 
    //         ,           ,                 ,
    //        ,            
    manager.responseSerializer = [AFHTTPResponseSerializer serializer];

    [manager POST:@"http://localhost/post/postjson.php" parameters:person progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        //NSLog(@"%@",responseObject);
        NSString *html = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];

        NSLog(@"%@",html);
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        NSLog(@"%@",error);
    }];
}
}

좋은 웹페이지 즐겨찾기