如何在NSURLRequest中设置cookies
2013-06-08 10:42
441 查看
在使用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。
那么真正的浏览器是如何做到的直接登录?一般来说,答案都是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。
相关文章推荐
- IOS学习之在NSURLRequest中设置cookies
- iOS开发之如何在NSURLRequest中设置自定义header请求头
- 如何使用HttpWebRequest POST数据时设置Connection="Keep-Alive"
- JSP中如何设置Cookies
- c# HttpWebRequest 代码手动设置cookies的简单办法
- Jquery如何序列化form表单数据为JSON对象 C# ADO.NET中设置Like模糊查询的参数 从客户端出现小于等于公式符号引发检测到有潜在危险的Request.Form 值 jquery调用iframe里面的方法 Js根据Ip地址自动判断是哪个城市 【我们一起写框架】MVVM的WPF框架(三)—数据控件 设计模式之简单工厂模式(C#语言描述)
- request.getCookies()得不到设置的cookie,浏览器里却存在
- [转]SMARTY模板中如何使用get,post,request,cookies,sessio...
- SMARTY模板中如何使用get,post,request,cookies,session,server变量
- Apache HttpAsyncClient 如何设置per request timeout
- 模板中如何使用$smarty变量get,post,request,cookies,session,server,env
- NSHTTPCookieStorage NSURLRequest 设置Cookie
- SMARTY模板中如何使用get,post,request,cookies,session,server变量
- 如何在ajax请求中设置特殊的RequestHeader
- 如何在ajax请求中设置特殊的RequestHeader
- SMARTY模板中如何使用get,post,request,cookies,session,server变量
- SMARTY模板中如何使用get,post,request,cookies,session,server变量
- SMARTY模板中如何使用get,post,request,cookies,session,server变量(摘)
- SMARTY模板中如何使用get,post,request,cookies,session,server变量
- JSP中如何设置Cookies