iOS 개발 AFNetworking 프레임워크

2744 단어

AFN 네트워크 요청 및 파일 업로드 다운로드


AFN 프레임워크를 사용하여 네트워크 데이터 요청을 처리하다가 다음 오류가 발생했습니다.

  • 우선 AFN 사용 방법은 관리자 대상을 만드는 것부터 시작하고 주의해야 할 세부 사항은:
  • // , 
    // self.requestSerializer =[AFHTTPRequestSerializer serializer];
    //AFHTTPRequestSerializer    ( )
    //AFJSONRequestSerializer JSON
    // AFPropertyListRequestSerializerPList
    
     // ( JSON)
    // self.responseSerializer =[AFJSONResponseSerializerserializer];
    // AFHTTPResponseSerializer   
    // AFJSONResponseSerializer JSON ( )
    //AFXMLParserResponseSerializer XML 
    //AFImageResponseSerializer Image
    // ( , SDWebImage)
    

    서버 측에서 작업을 제대로 하지 않아 발생한 오류와 처리 방법에 대해 설명합니다.
  • 오류 보고: 관리자.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/html"
  • 분석: 오류 정보의 대체적인 의미는 데이터를 받을 때'text/html'이라는 내용 유형이 부족하다는 것이다.이것은 서버 응답 헤더(content-type: 데이터 형식)에 문제가 생겼기 때문에 서버가 피드백한 것은text/html 형식이지만 실제로는 json 형식이고 AFN 프레임워크의 기본 응답 헤더는 이 형식을 받아들이지 않습니다
  • 해결 사고방식은 AFN 프레임워크 응답 헤더가 받아들인 매개 변수에text/html를 추가하는 것이다. 두 가지 방법이 있다.다음과 같습니다

  • 해결 방법 1: 바로 AFHTTPResponseSerializer로 갑니다.m 파일에서 acceptableContentTypes 속성 init 방법을 찾아 텍스트/html를 직접 추가합니다
    // AFN 
    - (instancetype)init {
        self = [super init];
        if (!self) {
            return nil;
        }
        // @"text/html"  , unlock 
        self.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", nil];
    
        return self;
    }
    

    해결 방법 2: 코드에서 AFN에서 사용하는 방법으로 acceptable ContentTypes 속성의 값을 수정하는 것입니다.
    // mgr
    AFHTTPSessionManager *mgr = [AFHTTPSessionManager manager];
        // , new  , 
    mgr.responseSerializer = [AFJSONResponseSerializer new];
    mgr.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", @"text/html", nil];
    
    

    AFN 쿠키 사용
        // cookie  
        NSArray *cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage]cookiesForURL:[NSURL URLWithString:url]];  
        for (NSHTTPCookie *tempCookie in cookies)  
                {  
                    // cookies  
                    NSLog(@"getCookie:%@",tempCookie);  
                }  
        NSDictionary *Request = [NSHTTPCookie requestHeaderFieldsWithCookies:cookies];  
         // cookie
        [[NSUserDefaults standardUserDefaults] setObject:[Request objectForKey:@"Cookie"] forKey:@"mUserDefaultsCookie"];  
        [[NSUserDefaults standardUserDefaults] synchronize];  
    
    // cookie
        [session.requestSerializer setValue:[[NSUserDefaults standardUserDefaults]objectForKey:@"mUserDefaultsCookie"]forHTTPHeaderField:@"Cookie"];  
    

    좋은 웹페이지 즐겨찾기