iOS 获取 cookie webView中使用Cookie

来源:互联网 发布:介绍编程的书 编辑:程序博客网 时间:2024/05/17 01:20

【获取Cookie】

+ (void)deleteCookie {

    // 清空 cookie

    NSHTTPCookieStorage *cookieJar = [NSHTTPCookieStoragesharedHTTPCookieStorage];

    NSArray *_tmpArray = [NSArray arrayWithArray:[cookieJar cookies]];

    for (id obj in _tmpArray) {

        [cookieJar deleteCookie:obj];

    }

    

}


+(void)YYZQSQObtainCookieBlock:(cookieBlock)block {

    // 现在服务器 直接返回了 cookie 这里就不需要用了

// 自己设置 cookie    

//    NSMutableDictionary *cookieProperties = [NSMutableDictionary dictionary];

//    [cookieProperties setObject:@"username" forKey:NSHTTPCookieName];

//    [cookieProperties setObject:@"rainbird" forKey:NSHTTPCookieValue];

//    [cookieProperties setObject:@"cnrainbird.com" forKey:NSHTTPCookieDomain];

//    [cookieProperties setObject:@"cnrainbird.com" forKey:NSHTTPCookieOriginURL];

//    [cookieProperties setObject:@"/" forKey:NSHTTPCookiePath];

//    [cookieProperties setObject:@"0" forKey:NSHTTPCookieVersion];

//    

//    NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:cookieProperties];

//    [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie];

//    NSString *token = [[NSUserDefaults standardUserDefaults]objectForKey:@"access_token"];


    NSString *imuserid = [[NSUserDefaultsstandardUserDefaults]objectForKey:@"imuserid"];//统一平台uid

    NSString * uid =  [YYUserManager sharedObject].user.uid;

    

    NSMutableDictionary *dict = WebServiceDictionary(CurrentUserID());

 

    NSString *urlStr = [NSStringstringWithFormat:@"%@&uid=%@&token=%@",WebServiceZQSQURL(@"m=Login&a=getCookies", dict),imuserid,uid];

    

    NSURL *url = [NSURL URLWithString:urlStr];

    

    NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheDatatimeoutInterval:30.0f];


    NSOperationQueue *queue = [[NSOperationQueue alloc]init];


    [NSURLConnection sendAsynchronousRequest:request

                                       queue:queue

                           completionHandler:^(NSURLResponse *response, NSData*data, NSError *error){

                               

                               

                               NSString * responseString = [[NSString allocinitWithBytes:[data byteslength:[data lengthencoding:NSUTF8StringEncoding];

                               NSLog(@"responseString === %@",responseString);

                               

                               

                               //转换NSURLResponse成为HTTPResponse

                               NSHTTPURLResponse *HTTPResponse = (NSHTTPURLResponse *)response;

                               //获取headerfields

                               NSDictionary *fields = [HTTPResponse allHeaderFields];//原生NSURLConnection写法

                               

                               NSLog(@"fields = %@",[fields description]);

                               

                               NSURL *urlCookie = [NSURL URLWithString:@"api-zqt-seller-test.cifco.net"];

                               //获取cookie方法1

                               NSArray *cookies1 = [NSHTTPCookiecookiesWithResponseHeaderFields:fields forURL:urlCookie];

                               NSLog(@"cookies1 == %@",cookies1);

                               //获取cookie方法2

                               NSString *cookieString = [[HTTPResponse allHeaderFieldsvalueForKey:@"Set-Cookie"];

                               NSLog(@"cookieString == %@",cookieString);

                               

                               //获取cookie方法3

                               NSHTTPCookieStorage *cookieJar = [NSHTTPCookieStorage sharedHTTPCookieStorage]; 


                           }];


}




//方法2

+ (BOOL)GetCookieData:(NSString *) urlString{

    

    NSString *  cookie = nil;

    

    NSURL *url = [NSURL URLWithString:urlString];

    NSMutableURLRequest *getRequest = [NSMutableURLRequestrequestWithURL:url];

    [getRequest setHTTPMethod:@"GET"];

    

    NSURLResponse *response;

    

    NSData *myReturn =[NSURLConnection sendSynchronousRequest:getRequest returningResponse:&response error:nil];

    NSHTTPURLResponse *HTTPResponse = (NSHTTPURLResponse *)response;

    NSDictionary *fields = [HTTPResponse allHeaderFields];

    NSLog(@"取得我要的cookie %@",[fields description]);

    //取得我要的cookie

    if (cookie == nil) {

        cookie =[[NSString allocinitWithString: [[[fields valueForKey:@"Set-Cookie"componentsSeparatedByString:@";"objectAtIndex:0]];

    }

    else{

        cookie = [[[fields valueForKey:@"Set-Cookie"componentsSeparatedByString:@";"objectAtIndex:0];

    }

    NSLog(@"取得我要的cookiecookie = %@",cookie);

    NSString *strRet = [[NSString allocinitWithData:myReturn encoding:NSASCIIStringEncoding];

    NSLog(@"取得我要的cookie %@",strRet);

    

    if([cookie length]<25)

        return NO;

    else

        return YES;

} 


【在WebView中使用Cookie】

 NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:url];

    if (self.isCookie) {

        

        // 网络请求头  稍后用于判断是不是我们需要的cookie

        NSString *strHttp = [XHWebServiceBaseAddresssubstringWithRange:NSMakeRange(716)];

        

        NSHTTPCookie *cookie = nil;

        // 这个是所有的Cookie

        NSHTTPCookieStorage *cookieJar = [NSHTTPCookieStoragesharedHTTPCookieStorage];

        // 现在服务器 直接返回了 cookie 这里就不需要用了

        for (NSHTTPCookie *ck in [cookieJar cookies]) {

            NSString * domain = [ck domain];

            NSString * value = [ck value];

            NSLog(@"domain 现在服务器 直接返回了======%@", domain);

            

            // 根据domain 来区分,那个是我们需要的cookie

            

            if ([domain hasPrefix:strHttp]) {

                NSLog(@"现在服务器 直接返回了= %@ == %@",domain,value);

                cookie = ck;

            }

        }

        

        NSLog(@"这条是我要的cookie ===%@",cookie);

        

        //    NSString * cookieName = [cookie name];

        NSString * cookieVal = [cookie value];

        //    NSString * domain = [cookie domain];

        

        //        // 手动添加 cookie

        //        NSDictionary *properties = [[NSMutableDictionary alloc] init];

        //        [properties setValue:@"PHPSESSID" forKey:NSHTTPCookieValue];

        //        [properties setValue:cookieVal forKey:NSHTTPCookieName];

        //        [properties setValue:@"" forKey:NSHTTPCookieDomain];

        //        [properties setValue:[NSDate dateWithTimeIntervalSinceNow:60*60] forKey:NSHTTPCookieExpires];

        //        [properties setValue:@"/" forKey:NSHTTPCookiePath];

        //        NSHTTPCookie *cookie11 = [[NSHTTPCookie alloc] initWithProperties:properties];


        // 根据服务器 需要的内容,自行拼接

        //    NSString *cookieString = [[NSString alloc] initWithFormat:@"name=PHPSESSID;value=%@;path=/;domain=%@;httponly",cookieVal,domain];

        NSString *cookieString = [[NSString allocinitWithFormat:@"PHPSESSID=%@",cookieVal];

        // 这里 可以传递多个 cookie

        //        NSArray *cookies11=[NSArray arrayWithObjects:cookie11,nil];

        //        NSDictionary *headers11=[NSHTTPCookie requestHeaderFieldsWithCookies:cookies11];

        

        // Cookie 需要根据服务器接收对象 进行自行修改  默认会加上 HTTP_

        [request setValue:cookieString forHTTPHeaderField:@"Cookie"];

    }

    

    return request;


0 0