afnetworking put请求多个http请求嵌套应该怎么处理

iOS 问题:AFNetWorking如何像ASI一样当需要添加个请求Header:
[request addRequestHeader:@"name" value:@"Jory lee"];
添加报头属性?? -
AFNetWorking如何像ASI一样当需要添加个请求Header:
[request addRequestHeader:@"name" value:@"Jory lee"];
添加报头属性??
共有 1 个回答
- (void)addValue:(NSString *)value forHTTPHeaderField:(NSString *)
登录后方可回复
登录后方可回答AFNetWorking使用multipartFormRequestWithMethod方法上传多张图片问题
现在做的一个项目需要上传图片,我就使用了AFNetWorking中的multipartFormRequestWithMethod方法,由于可能要一次上传多张图片,就按照如下代码来写的:
UIImage *image1 = [UIImage imageNamed:@"about_app"];
UIImage *image2 = [UIImage imageNamed:@"alter"];
NSArray *array = @
__block int i = 0;
NSMutableURLRequest *request = [[AFNetWorkSingleton shareInstance] multipartFormRequestWithMethod:@"POST" path:@"Mindex/getimg" parameters:nil constructingBodyWithBlock:^(id&AFMultipartFormData&formData){
for(UIImage *eachImage in array)
NSData *imageData = UIImageJPEGRepresentation(eachImage,0.5);
[formData appendPartWithFileData:imageData name:[NSString stringWithFormat:@"file%d",i ] fileName:[NSString stringWithFormat:@"abc%d.jpg",i ] mimeType:@"image/jpeg"];
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject){}
可是这样写不能成功提交到服务器, 但是将multipartFormRequestWithMethod方法中的for循环替换成下面这样的就成功上传了,这是为什么?我哪里写错了吗?
[formData appendPartWithFileData:UIImageJPEGRepresentation([array objectAtIndex:0], 0.5) name:@"image1" fileName:@"image1.jpg" mimeType:@"image/jpeg"];
[formData appendPartWithFileData:UIImageJPEGRepresentation([array objectAtIndex:1], 0.5) name:@"image2" fileName:@"image2.jpg" mimeType:@"image/jpeg"];
猜你喜欢:
回复于 11月前
您好,您的这个问题解决了吗,如果解决的话,给发份代码呗
),然后在出现的“enter code here”处贴入你的代码。
回复特定回复的时候,请点击该回复右侧的回复链接,系统将自动创建楼号和@通知。
@他人的时候注意,id后面请加一个空格。
使用左侧工具栏“贴链接”按钮()创建的优酷、土豆、youtube视频链接,将自动生成播放区域,不需要使用其他包含方式。
如果要创作长篇格式复杂的帖子,本站建议Mac用户使用,离线写好,贴入即可。你的位置: >
> ios htttp网络请求cookie的读取与写入(NSHTTPCookieStorage)
当你访问一个网站时,NSURLRequest都会帮你主动记录下来你访问的站点设置的cookie,如果 Cookie 存在的话,会把这些信息放在 NSHTTPCookieStorage 容器中共享,当你下次再访问这个站点时,NSURLRequest会拿着上次保存下来了的cookie继续去请求。
同样适用于ASIHTTPRequest,AFNetworking, Webview等,cookie常用于一些基于认证的网络请求
认识下NSHTTPCookieStorage
NSHTTPCookieStorage 实现了一个管理cookie的单例对象(只有一个实例),每个cookie都是NSHTTPCookie类的实例,最为一个规则,cookie在所有应用之间共享并在不同进程之间保持同步。Session cookie(一个isSessionOnly方法返回YES的cookie)只能在单一进程中使用。
Cookie是由服务器端生成,发送给User-Agent(一般是浏览器或者客户端),浏览器会将Cookie的key/value保存到某个目录下的文本文件内,下次请求同一网站地址时就发送该Cookie给服务器
HTTP header
HTTP header中包含HTTP请求与响应的操作参数. header属性定义了所传输数据的各种特性. header属性以属性名开始,以冒号结尾,最后是属性值.属性名及值会因应用的不同
一.iOS htttp网络请求cookie的读取与写入:
1.原生NSURLConnection写法
NSURLConnection cookie的读取与写入
Objective-C
一.获取cookie
- (IBAction)cookieTouched:(id)sender {
NSURL *url = [NSURL URLWithString:@"http://api.skyfox.org/api-test.php"];
NSURLRequest *request = [NSURLRequest requestWithURL:url]
cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData
timeoutInterval:3];
NSOperationQueue *queue = [[NSOperationQueue alloc]init];
[NSURLConnection sendAsynchronousRequest:request
queue:queue
completionHandler:^(NSURLResponse *response, NSData *data, NSError *error){
//转换NSURLResponse成为HTTPResponse
NSHTTPURLResponse *HTTPResponse = (NSHTTPURLResponse *)
//获取headerfields
NSDictionary *fields = [HTTPResponse allHeaderFields];//原生NSURLConnection写法
// NSDictionary *fields = [operation.response allHeaderFields]; //afnetworking写法
NSLog(@"fields = %@",[fields description]);
//获取cookie方法1
// NSArray *cookies = [NSHTTPCookie cookiesWithResponseHeaderFields:fields forURL:url];
//获取cookie方法2
//NSString *cookieString = [[HTTPResponse allHeaderFields] valueForKey:@"Set-Cookie"];
//获取cookie方法3
NSHTTPCookieStorage *cookieJar = [NSHTTPCookieStorage sharedHTTPCookieStorage];
for (NSHTTPCookie *cookie in [cookieJar cookies]) {
NSLog(@"cookie%@", cookie);
123456789101112131415161718192021222324252627282930
一.获取cookie- (IBAction)cookieTouched:(id)sender {&&&&NSURL *url = [NSURL URLWithString:@"http://api.skyfox.org/api-test.php"];&&&&NSURLRequest *request = [NSURLRequest requestWithURL:url]&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& timeoutInterval:3];&&&&NSOperationQueue *queue = [[NSOperationQueue alloc]init];&&&&[NSURLConnection sendAsynchronousRequest:request&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& queue:queue&&&&&&&&&&&&&&&&&&&&&&&&&& completionHandler:^(NSURLResponse *response, NSData *data, NSError *error){&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //转换NSURLResponse成为HTTPResponse&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& NSHTTPURLResponse *HTTPResponse = (NSHTTPURLResponse *)response;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //获取headerfields&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& NSDictionary *fields = [HTTPResponse allHeaderFields];//原生NSURLConnection写法&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& // NSDictionary *fields = [operation.response allHeaderFields]; //afnetworking写法&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& NSLog(@"fields = %@",[fields description]);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //获取cookie方法1&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& // NSArray *cookies = [NSHTTPCookie cookiesWithResponseHeaderFields:fields forURL:url];
&& //获取cookie方法2&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //NSString *cookieString = [[HTTPResponse allHeaderFields] valueForKey:@"Set-Cookie"];&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //获取cookie方法3&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& NSHTTPCookieStorage *cookieJar = [NSHTTPCookieStorage sharedHTTPCookieStorage];&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& for (NSHTTPCookie *cookie in [cookieJar cookies]) {&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& NSLog(@"cookie%@", cookie);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& }&&&&&&&&&&&&&&&&&&&&&&&&&& }];&&&&}
2.AFNetworking 写法
iosAFNetworking网络请求网络cookie的读取与写入
Objective-C
[[APIClient sharedClient] postPath:@"http://api.skyfox.org/api-test.php" parameters:p success:^(AFHTTPRequestOperation *operation, id JSON) {
NSDictionary *fields = [operation.response allHeaderFields]; //afnetworking写法
NSLog(@"fields = %@",[fields description]);
NSURL *url = [NSURL URLWithString:@"http://api.skyfox.org/api-test.php"];
//获取cookie方法1
NSArray *cookies = [NSHTTPCookie cookiesWithResponseHeaderFields:fields forURL:url];
//获取cookie方法2
//NSString *cookieString = [[HTTPResponse allHeaderFields] valueForKey:@"Set-Cookie"];
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
123456789101112
[[APIClient sharedClient] postPath:@"http://api.skyfox.org/api-test.php" parameters:p success:^(AFHTTPRequestOperation *operation, id JSON) {&&&&&&&&NSDictionary *fields = [operation.response allHeaderFields]; //afnetworking写法&&&&&&&&NSLog(@"fields = %@",[fields description]);&&&&&&&&NSURL *url = [NSURL URLWithString:@"http://api.skyfox.org/api-test.php"];&&&&&&&&//获取cookie方法1&&&&&&&& NSArray *cookies = [NSHTTPCookie cookiesWithResponseHeaderFields:fields forURL:url];&&&&&&&&//获取cookie方法2&&&&&&&&//NSString *cookieString = [[HTTPResponse allHeaderFields] valueForKey:@"Set-Cookie"];&&&&&} failure:^(AFHTTPRequestOperation *operation, NSError *error) {&&&&&&&&&&}];
二.清空cookie
ios网络请求网络cookie的清空
Objective-C
NSHTTPCookieStorage *cookieJar = [NSHTTPCookieStorage sharedHTTPCookieStorage];
NSArray *cookieArray = [NSArray arrayWithArray:[cookieJar cookies]];
for (id obj in cookieArray) {
[cookieJar deleteCookie:obj];
NSHTTPCookieStorage *cookieJar = [NSHTTPCookieStorage sharedHTTPCookieStorage];&&NSArray *cookieArray = [NSArray arrayWithArray:[cookieJar cookies]];&&for (id obj in cookieArray) {&&&&[cookieJar deleteCookie:obj];&&}
三.手动设置Cookie 手动设置的Cookie不会自动持久化到沙盒
ios网络请求网络cookie的手动设置cookie
Objective-C
第一次请求手动设置个cookie
-(void)test1:(NSString*)urlString{
NSURL *url = [NSURL URLWithString:@"http://api.skyfox.org/cookie.php"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
NSMutableDictionary *cookieProperties = [NSMutableDictionary dictionary];
[cookieProperties setObject:@"username" forKey:NSHTTPCookieName];
[cookieProperties setObject:@"my ios cookie" forKey:NSHTTPCookieValue];
[cookieProperties setObject:@"api.skyfox.org" forKey:NSHTTPCookieDomain];
[cookieProperties setObject:@"api.skyfox.org" forKey:NSHTTPCookieOriginURL];
[cookieProperties setObject:@"/" forKey:NSHTTPCookiePath];
[cookieProperties setObject:@"0" forKey:NSHTTPCookieVersion];
[cookieProperties setObject:[NSDate dateWithTimeIntervalSinceNow:60*60] forKey:NSHTTPCookieExpires];//设置失效时间
[cookieProperties setObject:@"0" forKey:NSHTTPCookieDiscard]; //设置sessionOnly
NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:cookieProperties];
[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie];
[self.myWebView loadRequest:request];
//第二次请求会自动带上cookie
- (IBAction)test2:(id)sender {
NSURL *url = [NSURL URLWithString:@"http://api.skyfox.org/cookie.php"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[self.mywebview2 loadRequest:request];
12345678910111213141516171819202122232425
第一次请求手动设置个cookie-(void)test1:(NSString*)urlString{&&&&NSURL *url = [NSURL URLWithString:@"http://api.skyfox.org/cookie.php"];&&&&NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];&&&&&&&&NSMutableDictionary *cookieProperties = [NSMutableDictionary dictionary];&&&&[cookieProperties setObject:@"username" forKey:NSHTTPCookieName];&&&&[cookieProperties setObject:@"my ios cookie" forKey:NSHTTPCookieValue];&&&&[cookieProperties setObject:@"api.skyfox.org" forKey:NSHTTPCookieDomain];&&&&[cookieProperties setObject:@"api.skyfox.org" forKey:NSHTTPCookieOriginURL];&&&&[cookieProperties setObject:@"/" forKey:NSHTTPCookiePath];&&&&[cookieProperties setObject:@"0" forKey:NSHTTPCookieVersion];&&&&[cookieProperties setObject:[NSDate dateWithTimeIntervalSinceNow:60*60] forKey:NSHTTPCookieExpires];//设置失效时间&&&&[cookieProperties setObject:@"0" forKey:NSHTTPCookieDiscard]; //设置sessionOnly&&&&&NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:cookieProperties];&&&&[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie];&&&&[self.myWebView loadRequest:request];}//第二次请求会自动带上cookie- (IBAction)test2:(id)sender {&&&&NSURL *url = [NSURL URLWithString:@"http://api.skyfox.org/cookie.php"];&&&&NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];&&&&[self.mywebview2 loadRequest:request];}
request还可以这样设置个cookie
Objective-C
[request setHTTPShouldHandleCookies:YES];
[request setValue:[NSString stringWithFormat:@"%@=%@", [cookie name], [cookie value]] forHTTPHeaderField:@"Cookie"];
[request setHTTPShouldHandleCookies:YES];[request setValue:[NSString stringWithFormat:@"%@=%@", [cookie name], [cookie value]] forHTTPHeaderField:@"Cookie"];
四.Cookie的持久化存储
1.服务器端设置Cookie,以PHP为例
Objective-C
setcookie(name,value,expire,path,domain,secure)
setcookie(name,value,expire,path,domain,secure)
必需。规定 cookie 的名称。
必需。规定 cookie 的值。
可选。规定 cookie 的有效期。
可选。规定 cookie 的服务器路径。
可选。规定 cookie 的域名。
可选。规定是否通过安全的 HTTPS 连接来传输 cookie。
Objective-C
setcookie("TestCookie","my cookie value"); //没设置失效时间 关闭app后系统不会持久化Cookie
setcookie("TestCookie","my cookie value",time()+3600*24); //设置expire失效时间 关闭app后系统自动持久化Cookie
setcookie("TestCookie","my cookie value"); //没设置失效时间 关闭app后系统不会持久化Cookie&setcookie("TestCookie","my cookie value",time()+3600*24); //设置expire失效时间 关闭app后系统自动持久化Cookie
如果服务器设置了Cookie失效时间expiresDate ,sessionOnly:FALSE会被持久化到文件中,kill掉后系统自动保存,下次启动app会自动加载.binarycookies中的Cookies,以下是一条Cookie输出
Objective-C
&NSHTTPCookie version:0 name:"TestCookie" value:"my+cookie+value" expiresDate: 09:31:09 +0000 created: 09:30:49 +0000 sessionOnly:FALSE domain:"api.skyfox.org" path:"/" isSecure:FALSE&
&NSHTTPCookie version:0 name:"TestCookie" value:"my+cookie+value" expiresDate:2016-04-08 09:31:09 +0000 created:2016-04-08 09:30:49 +0000 sessionOnly:FALSE domain:"api.skyfox.org" path:"/" isSecure:FALSE&
持久化到了文件中,地址是 沙盒的 /Library/Cookies/org.skyfox.AFNetworking-demo.binarycookies
使用org.skyfox.AFNetworking-demo.binarycookies 结果如下
2.app端手动存储Cookie
如果没设置Cookie失效时间expiresDate:(null),sessionOnly:true,kill掉后系统不会自动保存Cookie,如果想持久化Cookie 模仿浏览器存住Cookie,使用NSUserDefaults存下即可,以下是一条Cookie输出
Objective-C
&NSHTTPCookie version:0 name:"TestCookie" value:"my+cookie+value" expiresDate:(null) created: 09:33:34 +0000 sessionOnly:TRUE domain:"api.skyfox.org" path:"/" isSecure:FALSE&
&NSHTTPCookie version:0 name:"TestCookie" value:"my+cookie+value" expiresDate:(null) created:2016-04-08 09:33:34 +0000 sessionOnly:TRUE domain:"api.skyfox.org" path:"/" isSecure:FALSE&
Objective-C
//合适的时机保存Cookie
- (void)saveCookies{
NSData *cookiesData = [NSKeyedArchiver archivedDataWithRootObject: [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject: cookiesData forKey: @"org.skyfox.cookie"];
[defaults synchronize];
//合适的时机加载Cookie 一般都是app刚刚启动的时候
- (void)loadCookies{
NSArray *cookies = [NSKeyedUnarchiver unarchiveObjectWithData: [[NSUserDefaults standardUserDefaults] objectForKey: @"org.skyfox.cookie"]];
NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
for (NSHTTPCookie *cookie in cookies){
[cookieStorage setCookie: cookie];
123456789101112131415
//合适的时机保存Cookie- (void)saveCookies{&&&&NSData *cookiesData = [NSKeyedArchiver archivedDataWithRootObject: [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]];&&&&NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];&&&&[defaults setObject: cookiesData forKey: @"org.skyfox.cookie"];&&&&[defaults synchronize];}//合适的时机加载Cookie 一般都是app刚刚启动的时候- (void)loadCookies{&&&&NSArray *cookies = [NSKeyedUnarchiver unarchiveObjectWithData: [[NSUserDefaults standardUserDefaults] objectForKey: @"org.skyfox.cookie"]];&&&&NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage];&&&&for (NSHTTPCookie *cookie in cookies){&&&&&&&&[cookieStorage setCookie: cookie];&&&&}}
转载请注明: &
与本文相关的文章}

我要回帖

更多关于 afnetworking取消请求 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信