`
cppmule
  • 浏览: 436599 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

IOS中http请求使用cookie

    博客分类:
  • iOS
 
阅读更多

IOS中http请求使用cookie

 一直以为ios的http请求这块很简单应该不支持记录,保存,或者使用cookie,可是想当然归想当然,真用的时候,真研究了一下发现还真强大。经过一番的研究简单说一下我的理解:当你访问一个网站时,不管你愿意或者不愿意,NSURLRequest都会帮你主动记录下来你访问的站点设置的cookie,而且很负责任的,当你下次再访问这个站点时,NSURLRequest会拿着上次保存下来了的cookie继续去请求。这规律同样适用于ASIHTTPRequest。所以当你做一些基于认证的网络请求时,cookie不失为一个完美的解决方案。

那么怎么查看cookie呢?很简单:

1
2
3
4
NSHTTPCookieStorage *cookieJar = [NSHTTPCookieStorage sharedHTTPCookieStorage];
for (NSHTTPCookie *cookie in [cookieJar cookies]) {
   NSLog(@"%@", cookie);
}

这样就列出了所有已保存的cookie,如果当前为空怎么办呢?随便请求一个url喽。

1
2
3
4
5
6
7
8
9
10
11
12
  NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://blog.cnrainbird.com"]
                                           cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData 
                                       timeoutInterval:3];
  
  [NSURLConnection sendSynchronousRequest:request 
                        returningResponse:nil
                                    error:nil];
  
  NSHTTPCookieStorage *cookieJar = [NSHTTPCookieStorage sharedHTTPCookieStorage];
  for (NSHTTPCookie *cookie in [cookieJar cookies]) {
    NSLog(@"%@", cookie);
  }

是不是得到了类似:

1
<NSHTTPCookie version:0 name:"PHPSESSID" value:"evf5rcboo8th1dnl53fs4ukmt2" expiresDate:(null) created:2012-03-13 14:28:13 +0000 (3.53342e+08) sessionOnly:TRUE domain:"blog.cnrainbird.com" path:"/" isSecure:FALSE>

的东东?这就是cookie啦

怎么清空cookie呢?

1
2
3
4
5
  NSHTTPCookieStorage *cookieJar = [NSHTTPCookieStorage sharedHTTPCookieStorage];
  NSArray *_tmpArray = [NSArray arrayWithArray:[cookieJar cookies]];
  for (id obj in _tmpArray) {
    [cookieJar deleteCookie:obj];
  }

这样cookie就消失的一干二净了。

会查看cookie了,也会清空cookie了,怎么设置指定的cookie呢?

1
2
3
4
5
6
7
8
9
10
  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];

这样就可以了。输入一下,是不是得到了下面这样的结果:

1
<NSHTTPCookie version:0 name:"username" value:"rainbird" expiresDate:(null) created:2012-03-13 14:36:53 +0000 (3.53342e+08) sessionOnly:TRUE domain:"cnrainbird.com" path:"/" isSecure:FALSE>

其实ios的cookie就这么简单。如果mac也支持这么干的话,那以后写点登陆的脚本不是简单多了:)

分享到:
评论

相关推荐

    IOS 网络请求中设置cookie

    IOS 网络请求中设置cookie 1. ASIHTTPRequest ASIHTTPRequest 是一款极其强劲的 HTTP 访问开源项目。让简单的 API 完成复杂的功能,如:异步请求,队列请求,GZIP 压缩,缓存,断点续传,进度跟踪,上传文件,HTTP ...

    详解Vue用axios发送post请求自动set cookie

    vue-resource不再维护之后,我也用起了axios,但是死活无法设置服务器发送过来的cookie 后来查询文档发现,这个是要单独配置的。 // `withCredentials` indicates whether or not cross-site Access-Control ...

    详解iOS App开发中Cookie的管理方法

    一、何为Cookie Cookie是网站为了便是终端身份,保存在终端本地的用户凭证信息。...iOS中进行HTTP网络请求Cookie管理主要由两个类负责,一个类是NSHTTPCookieStorage类,一个是NSHTTPCookie类。 1.NSHTTPCookieSt

    IOS开发第3方库之ASI下载

    l 支持上传或下载队列,并且可获取队列的进度信息 l 支持基本、摘要和NTLM身份认证,在同一会话中授权凭证会自动维持,并且可以存储在Keychain(Mac和iOS操作系统的密码管理系统)中 l 支持Cookie l 当应用(iOS 4+...

    vue项目使用axios发送请求让ajax请求头部携带cookie的方法

    检查发现是vue项目中使用axios发送ajax请求导致的。查看文档得知axios默认是不让ajax请求头部携带cookie的,因此,在main.js中设置如下: import axios from 'axios' axios.defaults.withCredentials=true;//让ajax...

    iOS开发之cookie研究demo2

    包括NSSession系统自己管理cookie、自己手动管理cookie;AFNetworking自己手动管理cookie;ASIHTTPRequest自己手动管理cookie。

    KKJSBridge:一站式解决WKWebView支持脱机包,AjaxFetch请求,表单请求和Cookie同步的问题(基于Ajax Hook,Fetch Hook和Cookie Hook)

    一站式解决WKWebView支持离线包,Ajax / Fetch请求和Cookie同步的问题(基于Ajax Hook,Fetch Hook和Cookie Hook) KKJSBridge支持的功能 JSBrdige相关 基于MessageHandler建造通信层 支持初期的管理 支持模块共享上...

    Vue axios 跨域请求无法带上cookie的解决

    我本地使用dev配置开发的时候 请求可以带上cookie信息 打包出来部署在服务器上 请求就没带上cookie信息。 然后自己慢慢排查,联合后端同事,排查这个cookie问题,前端也配置了 axios.defaults.withCredentials = ...

    cordova-plugin-cookie-persistence

    该插件将在发出第一个http请求之前将cookie推送到webview中,因此外部站点请求会将cookie包含在第一个请求中。细节安卓Cookie将存储在私有.txt文件中。的iOS iOS上的cookie可能不需要此插件。 从非常基本的测试中...

    详解axios中封装使用、拦截特定请求、判断所有请求加载完毕)

    •基于 Promise 的 HTTP 请求客户端,可同时在浏览器和 Node.js 中使用 •vue2.0之后,就不再对 vue-resource 更新,而是推荐使用 axios,本项目也是使用 axios •功能特性 •在浏览器中发送 XMLHttpRequests 请求 ...

    iOS中关于Cookie验证登录状态

    1、第一次进入应用,登录获取Cookie,此时如果用到的是AFN去获取接口数据,Cookie已经写入了,所以无需处理,每次请求的时候,会自动将该cookie传给后台去验证 2、将Cookie缓存到本地:  NSData *cookiesData = ...

    iOS AFNetworking中cookie重定向代码

    取出需要同步的url (登录请求中返回的重定向地址) BESTHttpItem *httpItem = [BESTHttpHelper sharedHelper].curHttpItem; NSString *url = [NSString stringWithFormat:@%@/#/login, httpItem.frontend_addr]; // ...

    iOs迁至WKWebView跨过的一些坑

    其实也就是这些东西:**页面尺寸问题、JS交互、请求拦截、cookie带不上的问题。**所以有时想要迁移还得解决这些问题,所以还是很烦的,所以一一解决喽。 页面尺寸的问题 我们知道有些网页在UIWebView上显示好好地...

    vue+axios全局添加请求头和参数操作

    走登录的接口都会返回一个token值,然后存起来方便之后调接口的时候给后台传过去,传给后台的方式有两种:(具体使用哪种需要和后台商量) 1、放在请求头中 2、放在接口的参数中 1、放在请求头中 下面代码是从本地...

    一个客户端为suno使用ai音乐发生器 SunoGenerator-main

    一个客户端为suno使用ai音乐发生器 SunoGenerator-main 【预览】 登录suno ai android和ios 使用在应用程序的webview登录到suno ai,将读取令牌并保存 ...在请求头中查找cookie 复制cookie字符串到输入框

    ASIHTTPRequest 最新版本 包 下载

    使用iOS SDK中的HTTP网络请求API,相当的复杂,调用很繁琐,ASIHTTPRequest就是一个对CFNetwork API进行了封装,并且使用起来非常简单的一套API,用Objective-C编写,可以很好的应用在Mac OS X系统和iOS平台的应用...

    iOS WKWebView适配实战篇

    一、Cookie适配 1.现状 WKWebView适配中最麻烦的就是cookie同步问题 WKWebView采用了独立存储控件...可以直接使用WKHTTPCookieStore遍历方式设值,可以在创建wkwebview时候就同步也可以是请求时候 // iOS11同步 HTT

    详解iOS App开发中session和coockie的用户数据存储处理

    在iOS7之后,NSURLSession作为系统推荐使用的HTTP请求框架,在进行前台请求的情况下,NSURLSession与NSURLConnection并无太大差异,对于后台的请求,NSURLSession更加灵活的优势就将展现无遗。 1.NSURLSession集合的...

    Flutter实现网络请求的方法示例

    Dio是一个强大易用的dart http请求库,支持Restful API、FormData、拦截器、请求取消、Cookie管理、文件上传/下载……. Flutter json数据解析是使用了json_serializable package包。它是一个自动化源代码生成器,...

Global site tag (gtag.js) - Google Analytics