AFNetWorking 简单使用

深入理解AFNetworking在iOS开发中的应用
本文详细介绍了在iOS开发中使用AFNetworking框架的原因、基本用法及实例,包括GET和POST请求的提交、文件下载和上传任务的创建、JSON或plist响应的处理,并强调了其在处理权限保护页面、Session和Cookie等问题时的优势。

目录:

 

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.

 

    }]; 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值