美文网首页
ios附带cookie加载网页

ios附带cookie加载网页

作者: Arthur澪 | 来源:发表于2017-12-19 17:36 被阅读0次

项目中有些时候需要与前端配合,比如访问页面时给它传递所需的cookie信息。如何附带这些信息呢?其实系统已经封装好了相关的类和方法,以供所需。

知识要点

两个类:

  • NSHTTPCookie
    顾名思义,NSHTTPCookie对象代表一个HTTP cookie。 这是一个不可改变的对象,其中包含有关cookie的信息。因此,应用时,可以访问cookie的各个属性,从中获取到相应的数据,也可以在cookie中带上某些数据传递出去。
    NSHTTPCookie通过一个包含cookie的属性的字典来初始化。

有几个key是必须要设置的: NSHTTPCookiePath, NSHTTPCookieName, NSHTTPCookieValue,还有就是NSHTTPCookieOriginURL 和 NSHTTPCookieDomain一定要选一个.

附:详解NSHTTPCookie=>https://www.cnblogs.com/worldtraveler/p/4739785.html

  • NSHTTPCookieStorage
    一个单例,用来管理存储的cookies。
    使用时,要设置接收策略, 可以在applicationDidBecomeActive方法中做
[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyAlways];

设置cookie的接收策略,有三种模式:
NSHTTPCookieAcceptPolicyAlways(默认),
NSHTTPCookieAcceptPolicyNever,
NSHTTPCookieAcceptPolicyOnlyFromMainDocumentDomain.

应用一:附带cookie访问网页

1、准备字典

    //  访问页面的地址
    NSURL *url = [NSURL URLWithString:@"http://... ..."];

    // 字典
    NSMutableDictionary *cookieDict = [[NSMutableDictionary alloc] initWithCapacity:0];
    
    [cookieDict setObject:[url host] forKey:NSHTTPCookieDomain];   //域名
    [cookieDict setObject:[url host] forKey:NSHTTPCookieOriginURL];  //url
    [cookieDict setObject:[url path] forKey:NSHTTPCookiePath];  // 路径
    [cookieDict setObject:@"0" forKey:NSHTTPCookieVersion];  // 版本
    
    [cookieDict setObject:@"userid" forKey:NSHTTPCookieName];  //所需信息
    [cookieDict setObject:@"123123" forKey:NSHTTPCookieValue];  //信息值

注:当需要传多个cookie信息时,要保证cookie的name不重复时,否则添加后会覆盖掉前面的。

2、初始化cookie对象

    //通过字典初始化
    NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:cookieDict];   
    // 添加cookie
    [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie];

3、加载网页

    NSURLRequest *request=[NSURLRequest requestWithURL:url];
    [self.webview loadRequest:request];

应用二:从cookie中获取信息

在网页加载完之后,可以拿到cookie

-(void)webViewDidFinishLoad:(UIWebView *)webView{
    
    NSString *currentURL = [webView stringByEvaluatingJavaScriptFromString:@"document.location"];
    NSLog(@"currentURL == %@",currentURL);

    NSArray *nCookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies];

    NSHTTPCookie *cookie;
    for (id c in nCookies){
        if ([c isKindOfClass:[NSHTTPCookie class]]){
            cookie=(NSHTTPCookie *)c;
            NSDictionary * dic= cookie.properties;
            NSLog(@"---%@: %@", cookie.name, cookie.value);
        }
    }
    
    NSDictionary * dic=[NSHTTPCookie requestHeaderFieldsWithCookies:nCookies];
}

相关文章

网友评论

      本文标题:ios附带cookie加载网页

      本文链接:https://www.haomeiwen.com/subject/ltdpdxtx.html