iOS AFNetworking进行网络请求时带上登陆成功后台返回的cookie

来源:互联网 发布:成都市行知小学怎么样 编辑:程序博客网 时间:2024/05/17 04:08
第一步,在登陆成功后存储cookie到本地
 登陆的接口,无需带用户名和密码

 NSArray *cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:[NSURLURLWithString:@"请求地址] ];

        NSData *UserData = [NSKeyedArchiver archivedDataWithRootObject:cookies] ;

        [[NSUserDefaults standardUserDefaults] setObject:UserData forKey:@"kUserDefaultsCookie"] ;


第二步,在需要自动登陆时获取cookie值,ios的网络请求函数会请这个cookie值自动加入请求url

 NSData *cookieData = [[NSUserDefaults standardUserDefaults] objectForKey:@"kUserDefaultsCookie"] ;

    if ([cookieData length]) {

        NSArray *cookies = [NSKeyedUnarchiver unarchiveObjectWithData:cookieData] ;

        NSHTTPCookie *cookie ;

        for (cookie in cookies) {

            [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie] ;

        }

 

    }


 AFNetworking进行网络请求时带上登陆成功后台返回的cookie

    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManagermanager];
    manager.
requestSerializer.HTTPShouldHandleCookies= YES;
    manager.
responseSerializer  = [AFJSONResponseSerializerserializer];
    [manager.
requestSerializersetValue: [[NSUserDefaultsstandardUserDefaults]objectForKey:@"cooKie"]forHTTPHeaderField:@"Cookie"];
    manager.
responseSerializer.acceptableContentTypes= [NSSetsetWithObjects:@"text/html",@"application/json",nil];
   
    
NSLog(@"=====++++++%@", [[NSUserDefaultsstandardUserDefaults]objectForKey:@"cooKie"]);
   
   
   
NSDictionary* dataDic = [SigngetData:parameter];
   
   
NSMutableDictionary*dic = [NSMutableDictionarydictionaryWithDictionary:dataDic];
   
   
NSString* signString = [SigngetSign:parameter];
    [dic
setValue:signStringforKeyPath:@"sign"];
    [dic
setValue:@"ios"forKeyPath:@"partner"];

   
NSString*urlString = [NSStringstringWithFormat:RequestTheAddress, url];

    [manager
POST:[urlStringstringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSetURLQueryAllowedCharacterSet]]parameters:dicsuccess:^(AFHTTPRequestOperation*operation, id responseObject) {
       
       
NSDictionary*fields= [operation.responseallHeaderFields];
       
NSArray*cookies=[NSHTTPCookiecookiesWithResponseHeaderFields:fieldsforURL:[NSURLURLWithString:[urlStringstringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSetURLQueryAllowedCharacterSet]]]];
       
       
NSDictionary* requestFields=[NSHTTPCookierequestHeaderFieldsWithCookies:cookies];
       
       
NSLog(@"%@", requestFields);
       
       
if ([url isEqualToString:@"m=api&c=user&a=login"]) {
           
if(requestFields.allKeys.count!= 0) {
                [[
NSUserDefaultsstandardUserDefaults]setObject:[requestFieldsobjectForKey:@"Cookie"]forKey:@"cooKie"];
            }
        }
       
       
NSLog(@"=====%@", [[NSUserDefaultsstandardUserDefaults]objectForKey:@"cooKie"]);
       
        network(responseObject);
    }
failure:^(AFHTTPRequestOperation*operation, NSError *error) {
       
NSLog(@"error = %@", operation.responseString);
       
    }];
0 0
原创粉丝点击