如何在NSURLRequest中设置cookies

在使用UIWebView访问网站时,经常遇到的一个问题是需要登录。比如访问新浪微博,或者访问某个个人账号,但是需要直接访问url,却会被重定向到登录页进行登录。

那么真正的浏览器是如何做到的直接登录?一般来说,答案都是cookies。在你第一次登录时,网站设置了cookie,浏览器保存这些携带了登录信息的cookies,以后就可以直接登录。

所以我们要做的就是在url request中带上cookies。NSMutableURLRequest中提供了- (void)setValue:(NSString *)value forHTTPHeaderField:(NSString *)field 方法。可以用来设置Http request header中的各个属性。

所以,比如我们要设置usrId和token两个cookie。

//set user id to cookie

    NSDictionary *dictCookieUId = [NSDictionarydictionaryWithObjectsAndKeys:@"userId", NSHTTPCookieName,

                                      userId, NSHTTPCookieValue,

                                      @"/", NSHTTPCookiePath,

                                      @"test.com", NSHTTPCookieDomain,

                                      nil];

    NSHTTPCookie *cookieUserId = [NSHTTPCookie cookieWithProperties:dictCookieUId];

    //set token to cookie

    NSDictionary *dictCookiePToken = [NSDictionarydictionaryWithObjectsAndKeys:@"token", NSHTTPCookieName,

                                   token, NSHTTPCookieValue,

                                   @"/", NSHTTPCookiePath,

                                   @"test.com, NSHTTPCookieDomain,

                                   nil];

    NSHTTPCookie *cookiePassToken = [NSHTTPCookie cookieWithProperties:dictCookiePToken];

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURLURLWithString:strUrl]];

    // set cookies

    NSArray *arrCookies = [NSArray arrayWithObjects: cookieUserId, cookiePassToken, nil];

    NSDictionary *dictCookies = [NSHTTPCookie requestHeaderFieldsWithCookies:arrCookies];

    [request setValue: [dictCookies objectForKey:@"Cookie"] forHTTPHeaderField: @"Cookie"];

    return request;

生成cookie的方法是先将cookie的各个property作为键值对生成dictionary,然后调用cookieWIthProperties生成cookie。将生成的cookie放到array中,使用NSHttpCookie的reqeustHeaderFieldsWithCookies方法拼接成合法的http header field。最后set到request中即可。


同样的方法,还可以设置很多http header中的field。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值