目录:
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
m
anager
];
3.
//
调用
get
方法
4.
[manager
GET
:@“http:
//example.com/resources.json”pa
rameters : 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
mana
ger
];
2.
NSDictionary
*parameters = @{
@"foo"
:
@"bar"
};
3.
[manager
POST
:
@"http://example.com/resources.json"
parameters
:parameters
suc
cess
:^(
AFHTTPRequestOperation
*operation,
id
responseObject) {
4.
NSLog(
@"JSON: %@"
, responseObject);
5.
}
failure
:^(
AFHTTPRequestOperation
*operation,
NSError
*error) {
6.
NSLog(
@"Error: %@"
, error);
7.
}];
"POST"
多个请求
[objc]
view plaincopy
1.
AFHTTPRequestOperationManager
*manager = [AFHTTPRequestOperationManager
mana
ger
];
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
con
structingBodyWithBlock
:^(
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
defaul
tSessionConfiguration
];
2.
AFURLSessionManager
*manager = [[AFURLSessionManager
alloc
]
initWithSessionC
onfiguration
:configuration];
3.
4.
NSURL
*URL = [NSURL
URLWithString
:
@"http://example.com/download.zip"
];
5.
NSURLRequest
*request = [NSURLRequest
requestWithURL
:URL];
6.
7.
NSURLSessionDownloadTask
*downloadTask = [manager
downloadTaskWithRequest
:re
quest
progress
:nil
destination
:^
NSURL
*(
NSURL
*targetPath,
NSURLResponse
*response)
{
8.
NSURL
*documentsDirectoryURL = [[NSFileManager
defaultManager
]
URLForDir
ectory
:NSDocumentDirectory
inDomain
:NSUserDomainMask
appropriateForURL
:nil
create
:
N
O
error
:nil
];
9.
return
[documentsDirectoryURL
URLByAppendingPathComponent
:[response
sugg
estedFilename
]];
10.
}
completionHandler
:^(
NSURLResponse
*response,
NSURL
*filePath,
NSError
*err
or) {
11.
NSLog(
@"File downloaded to: %@"
, filePath);
12.
}];
13.
[downloadTask
resume
];
3
、创建一个上传文件的任务
[objc]
view plaincopy
1.
NSURLSessionConfiguration
*configuration = [NSURLSessionConfiguration
defaul
tSessionConfiguration
];
2.
AFURLSessionManager
*manager = [[AFURLSessionManager
alloc
]
initWithSessionC
onfiguration
:configuration];
3.
4.
NSURL
*URL = [NSURL
URLWithString
:
@"http://example.com/upload"
];
5.
NSURLRequest
*request = [NSURLRequest
requestWithURL
:URL];
6.
7.
NSURL
*filePath = [NSURL
fileURLWithPath
:
@"file://path/to/image.png"
];
8.
NSURLSessionUploadTask
*uploadTask = [manager
uploadTaskWithRequest
:request
fromFile
:filePath
progress
:nil
completionHandler
:^(
NSURLResponse
*response,
id
resp
onseObject,
NSError
*error) {
9.
if
(error) {
10.
NSLog(
@"Error: %@"
, error);
11.
}
else
{
12.
NSLog(
@"Success: %@ %@"
, response, responseObject);
13.
}
14.
}];
15.
[uploadTask
resume
];
4
、处理
JSON
或
Plist
响应
IOS
应用在处理
JSON
和
Plist
响应的时候可以十分轻便将其转换成
NSDictionary
对象或者
NSArray
对像,
AFHTTPRequestOpeartionManager
默认就可以处理
JSON
或
Plist
响应,也就是说当我们
response.MIMEType
为
appication/json
、
text/json,AFHTTPRequestOpeartionManager
默认就可以处理,无需再次指定服务
器响应解析器。
[objc]
view plaincopy
1.
2.
AFHTTPRequestOperationManager
*manager = [AFHTTPRequestOperationManager
manager
];
3.
// manager.responseSerializer = [AFHTTPResponseSerializer serializer];
4.
NSDictionary
*parameter = @{
@"location"
:
@"
长沙
"
,
@"output"
:
@"json"
,
@"ak"
:
@"jlflVx1VTUahj05Q7GfB7PCf"
};
5.
[manager
GET
:
@"http://api.map.baidu.com/telematics/v3/weather?"
paramete
rs
:parameter
success
:^(
AFHTTPRequestOperation
*operation,
id
responseObject) {
6.
NSLog(
@"OK"
);
7.
dic = responseObject;
8.
NSArray
*keys = [dic
allKeys
];
9.
NSLog(
@"%@"
,keys);
10.
// _datas = responseObject;
11.
// NSString *stringData = [[NSString alloc]initWithData:_datas encodi
ng:NSUTF8StringEncoding];
12.
// NSLog(@"%@",stringData);
13.
14.
}
failure
:^(
AFHTTPRequestOperation
*operation,
NSError
*error) {
15.
NSLog(
@"NOT OK"
);
16.
}];