目录:

1、为什么要用AFNetworking

2、AFNetworking的用法

一、为什么要用AFNetworking

在ios开发中,一般情况下,简单的向某个web站点简单的页面提交请求并获取服务器的响应,用xcode自带的NSURLConnection是能胜任的。但是,在绝大部分下我们所需要访问的web页面则是属于那种受到权限保护的页面,并不是有一个简单的URL可以访问的。这就涉及到了Session和Cookie的处理了,在此时使用NSURLConnection也是能够达到要求的,只是其中处理起来的复杂度和难度就提升了。

为了更好的处理向Web站点的请求,包括处理Session,Cookie等细节问题,使用AFNetworking则是更好的选择,他可以用于发送HTTP请求,接收HTTP的响应,但是不会缓存服务器的响应,不能执行HTML页面中的JAvascript代码,同时,AFNetworking还内置支持JSON,plist文件和XML文件的解析,使用比较方便。

扩展:1、Session:中文有译作时域的,就是只某个客户端在访问服务器起到停止访问这一段的时间间隔被称为时域。

2、Cookie:由服务器发送给客服端,把Cookie的key:value值储存在本地文件夹下,当下次请求的时候能够直接发送Cookie获得权限验证

二、AFNetworking的用法

1、提交GET请求和提交POST请求

AFNetworking是第三方的框架,所以需要开发者自行下载,安装。并在AFNetworking.h文件导入#import“AFHTTPRequestOpeartionManager.h ”,把AFNetworking.h头文件放入prefix文件中。

a、创建AFHTTPRequestOpeartionManger对象

b、根据服务器内容的不同,为AFHTTPRequestOpeartionManger对象指定不同的解析器,该对象默认的解析器是JSON和Plist文件解析器。如果服务器的数据是XML格式则需要手动的更改解析器

c、发送GET请求:  用Manager对象调用 GET:parameters:success:failure:方法即可,success代码块和failue代码块在网络请求成功/失败过后调用。

d、success:参数指定了代码块中处理服务器响应成功的正确数据,failue:参数指定了代码块中处理服务器响应失败的错误数据、

AFHTTPRquestOperationManager

包含了常见的HTTP访问web站点的模式,有创建请求,连续的响应,网络类型监视以及安全。

“GET”:

[objc] view plaincopy

  1. <span style="font-size:12px;">//创建AFHTTPRequestOperationManager对象
  2. AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManger manager];
  3. //调用get方法
  4. [manager GET:@“http://example.com/resources.json”parameters : parameters
  5. //加载成功的代码块,可以接收数据
  6. success:^(AFHTTPRequestOperation *operation,id responseobject)]{
  7. NSLog(@“json“:%@”,responseObject);
  8. }failure:^(AFHTTPRequestOperation *operation,NSError *error){
  9. NSLog(@“Error:%@”,error);
  10. }];</span>

”POST“:URL-Form-Encoded Request  URL编码请求类型

[objc] view plaincopy

  1. AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
  2. NSDictionary *parameters = @{@"foo": @"bar"};
  3. [manager POST:@"http://example.com/resources.json" parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {
  4. NSLog(@"JSON: %@", responseObject);
  5. } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
  6. NSLog(@"Error: %@", error);
  7. }];

"POST"多个请求

  1. AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
  2. NSDictionary *parameters = @{@"foo": @"bar"};
  3. NSURL *filePath = [NSURL fileURLWithPath:@"file://path/to/image.png"];
  4. [manager POST:@"http://example.com/resources.json" parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
  5. [formData appendPartWithFileURL:filePath name:@"image" error:nil];
  6. } success:^(AFHTTPRequestOperation *operation, id responseObject) {
  7. NSLog(@"Success: %@", responseObject);
  8. } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
  9. NSLog(@"Error: %@", error);
  10. }];
 

2、创建一个下载文件的任务

AFURLSessionManager创建并完善了一个NSURLSession的对象基于遵从NSURLSessionDelegate与NSURLSessionDataDelegate协议NSURLSessionConfigration对象。

[objc] view plaincopy

  1. NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
  2. AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];
  3. NSURL *URL = [NSURL URLWithString:@"http://example.com/download.zip"];
  4. NSURLRequest *request = [NSURLRequest requestWithURL:URL];
  5. NSURLSessionDownloadTask *downloadTask = [manager downloadTaskWithRequest:request progress:nil destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) {
  6. NSURL *documentsDirectoryURL = [[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:NO error:nil];
  7. return [documentsDirectoryURL URLByAppendingPathComponent:[response suggestedFilename]];
  8. } completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) {
  9. NSLog(@"File downloaded to: %@", filePath);
  10. }];
  11. [downloadTask resume];

3、创建一个上传文件的任务

[objc] view plaincopy

  1. NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
  2. AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];
  3. NSURL *URL = [NSURL URLWithString:@"http://example.com/upload"];
  4. NSURLRequest *request = [NSURLRequest requestWithURL:URL];
  5. NSURL *filePath = [NSURL fileURLWithPath:@"file://path/to/image.png"];
  6. NSURLSessionUploadTask *uploadTask = [manager uploadTaskWithRequest:request fromFile:filePath progress:nil completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
  7. if (error) {
  8. NSLog(@"Error: %@", error);
  9. else {
  10. NSLog(@"Success: %@ %@", response, responseObject);
  11. }
  12. }];
  13. [uploadTask resume];

4、处理JSON或Plist响应

IOS应用在处理JSON和Plist响应的时候可以十分轻便将其转换成NSDictionary对象或者NSArray对像,AFHTTPRequestOpeartionManager默认就可以处理JSON或Plist响应,也就是说当我们response.MIMEType为appication/json、text/json,AFHTTPRequestOpeartionManager默认就可以处理,无需再次指定服务器响应解析器。

[objc] view plaincopy

  1. AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
  2. //    manager.responseSerializer = [AFHTTPResponseSerializer serializer];
  3. NSDictionary *parameter = @{@"location":@"长沙",@"output":@"json",@"ak":@"jlflVx1VTUahj05Q7GfB7PCf"};
  4. [manager GET:@"http://api.map.baidu.com/telematics/v3/weather?" parameters:parameter success:^(AFHTTPRequestOperation *operation, id responseObject) {
  5. NSLog(@"OK");
  6. dic = responseObject;
  7. NSArray *keys = [dic allKeys];
  8. NSLog(@"%@",keys);
  9. //        _datas = responseObject;
  10. //        NSString *stringData = [[NSString alloc]initWithData:_datas encoding:NSUTF8StringEncoding];
  11. //        NSLog(@"%@",stringData);
  12. } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
  13. NSLog(@"NOT OK");
  14. }];

AFNetWorking的更多相关文章

  1. 【原】AFNetworking源码阅读(六)

    [原]AFNetworking源码阅读(六) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 这一篇的想讲的,一个就是分析一下AFSecurityPolicy文件,看看AF ...

  2. 【原】AFNetworking源码阅读(五)

    [原]AFNetworking源码阅读(五) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇中提及到了Multipart Request的构建方法- [AFHTTP ...

  3. 【原】AFNetworking源码阅读(四)

    [原]AFNetworking源码阅读(四) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇还遗留了很多问题,包括AFURLSessionManagerTaskDe ...

  4. 【原】AFNetworking源码阅读(三)

    [原]AFNetworking源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇的话,主要是讲了如何通过构建一个request来生成一个data tas ...

  5. 【原】AFNetworking源码阅读(二)

    [原]AFNetworking源码阅读(二) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇中我们在iOS Example代码中提到了AFHTTPSessionMa ...

  6. 【原】AFNetworking源码阅读(一)

    [原]AFNetworking源码阅读(一) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 AFNetworking版本:3.0.4 由于我平常并没有经常使用AFNetw ...

  7. AFNetworking 3.0 源码解读 总结(干货)(下)

    承接上一篇AFNetworking 3.0 源码解读 总结(干货)(上) 21.网络服务类型NSURLRequestNetworkServiceType 示例代码: typedef NS_ENUM(N ...

  8. AFNetworking 3.0 源码解读 总结(干货)(上)

    养成记笔记的习惯,对于一个软件工程师来说,我觉得很重要.记得在知乎上看到过一个问题,说是人类最大的缺点是什么?我个人觉得记忆算是一个缺点.它就像时间一样,会自己消散. 前言 终于写完了 AFNetwo ...

  9. AFNetworking 3.0 源码解读(十一)之 UIButton/UIProgressView/UIWebView + AFNetworking

    AFNetworking的源码解读马上就结束了,这一篇应该算是倒数第二篇,下一篇会是对AFNetworking中的技术点进行总结. 前言 上一篇我们总结了 UIActivityIndicatorVie ...

  10. AFNetworking 3.0 源码解读(十)之 UIActivityIndicatorView/UIRefreshControl/UIImageView + AFNetworking

    我们应该看到过很多类似这样的例子:某个控件拥有加载网络图片的能力.但这究竟是怎么做到的呢?看完这篇文章就明白了. 前言 这篇我们会介绍 AFNetworking 中的3个UIKit中的分类.UIAct ...

随机推荐

  1. python之路:Day03 --- Python基础3 >>函数

    本节内容 1.函数基本语法及特性 2.参数 3.局部变量与全局变量 4.返回值 嵌套函数 5.递归 6.匿名函数 7.高阶函数 8.内置函数 一.函数基本语法及特性 区别 面向过程编程:根据业务逻辑从 ...

  2. How GitHub Works《Github是如何工作的?》

    https://github.com/blog/920-how-github-works 如果你想知道Github是如何工作的,你可以看查看Zach Holman(@holman)的三篇文章: Hou ...

  3. Beginning Scala study note(1) Geting Started with Scala

    1. Scala is a contraction of "scalable" and "language". It's a fusion of objecte ...

  4. iTerm 2 && Oh My Zsh

    一年前,在搞终端的时候偶然一次机会,让我看到了各种强大的DIY界面,这让我很想去自己搞一个.于是在网上不断的寻找资源,也请教了大多数朋友.最终以失败告终.最近,本人又突然想起当时这件事,于是,决定边做 ...

  5. Asp.net中static变量和viewstate的使用方法(谨慎)

    在.Net平台下进行CS软件开发时,我们经常遇到以后还要用到某些变量上次修改后的值,为了简单起见,很多人都习惯用static来定义这些变量,我也是.这样非常方便,下一次调用某个函数时该变量仍然保存的是 ...

  6. Codeforces CF#628 Education 8 A. Tennis Tournament

    A. Tennis Tournament time limit per test 1 second memory limit per test 256 megabytes input standard ...

  7. js开发笔记

    jQuery jQuery判断页面元素是否存在:$("#someID").length > 0 AJAX 通过设置window.location.hash值和响应window ...

  8. WPF CodeBehind后台动态创建图片及添加事件

    问题:WPF中DataGrid需要动态生成列并绑定值,首列包含图片和文本,点击图片触发事件. 难点:1.图片资源在VisualTree中的绑定   2.图片的事件绑定 public class Mai ...

  9. CentOS6.5的vsftp搭建流程(一)

    前几次搭建FTP都失败了,不是登陆不了,就是目录没有权限.现在终于摸索出了靠谱的操作流程,分享之~ 1. 查看是否安装了vsftpd,未安装则安装 [root@iZ283tian2dZ /]# rpm ...

  10. 2016-2017 ACM-ICPC Northwestern European Regional Programming Contest (NWERC 2016)

    A. Arranging Hat $f[i][j]$表示保证前$i$个数字有序,修改了$j$次时第$i$个数字的最小值. 时间复杂度$O(n^3m)$. #include <bits/stdc+ ...