IOS 网络请求

技术交流新QQ群:414971585

关于网络请求的重要性我想不用多说了吧。对于移动客户端来说,网络的重要性不言而喻。常见的网络请求有同步GET, 同步POST, 异步GET, 异步POST。今天来看一下四种网络请求的实现方式。

一、同步GET


1

2

3

4

5

6

7

8

9

10

11

12

// 1.将网址初始化成一个OC字符串对象

NSString *urlStr = [NSString stringWithFormat:@"%@?query=%@®ion=%@&output=json&ak=6E823f587c95f0148c19993539b99295", kBusinessInfoURL, @"银行", @"济南"];

// 如果网址中存在中文,进行URLEncode

NSString *newUrlStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

// 2.构建网络URL对象, NSURL

NSURL *url = [NSURL URLWithString:newUrlStr];

// 3.创建网络请求

NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:10];

// 创建同步链接

NSURLResponse *response = nil;

NSError *error = nil;

NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];

当创建好同步链接以后, 就可以采用相应的方法进行解析。下面创建异步连接也是一样的。

二、同步POST


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

// 1.根据网址初始化OC字符串对象

    NSString *urlStr = [NSString stringWithFormat:@"%@", kVideoURL];

    // 2.创建NSURL对象

    NSURL *url = [NSURL URLWithString:urlStr];

    // 3.创建请求

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

    // 4.创建参数字符串对象

    NSString *parmStr = @"method=album.channel.get&appKey=myKey&format=json&channel=t&pageNo=1&pageSize=10";

    // 5.将字符串转为NSData对象

    NSData *pramData = [parmStr dataUsingEncoding:NSUTF8StringEncoding];

    // 6.设置请求体

    [request setHTTPBody:pramData];

    // 7.设置请求方式

    [request setHTTPMethod:@"POST"];

    

    // 创建同步链接

    NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];

三、异步GET


1

2

3

4

5

6

7

8

9

10

11

    NSString *urlStr = [NSString stringWithFormat:@"http://image.zcool.com.cn/56/13/1308200901454.jpg"];

    NSString *newStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

    NSURL *url = [NSURL URLWithString:newStr];

    NSURLRequest *requst = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:10];

    //异步链接(形式1,较少用)

    [NSURLConnection sendAsynchronousRequest:requst queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {

        self.imageView.image = [UIImage imageWithData:data];

        // 解析

        NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];

        NSLog(@"%@", dic);

    }];

四、异步POST


1

2

3

4

5

6

7

8

9

10

11

12

13

14

// POST请求

    NSString *urlString = [NSString stringWithFormat:@"%@",kVideoURL];

    //创建url对象

    NSURL *url = [NSURL URLWithString:urlString];

    //创建请求

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:10];

    //创建参数字符串对象

    NSString *parmStr = [NSString stringWithFormat:@"method=album.channel.get&appKey=myKey&format=json&channel=t&pageNo=1&pageSize=10"];

    //将字符串转换为NSData对象

    NSData *data = [parmStr dataUsingEncoding:NSUTF8StringEncoding];

    [request setHTTPBody:data];

    [request setHTTPMethod:@"POST"];

    //创建异步连接(形式二)

    [NSURLConnection connectionWithRequest:request delegate:self];

一般的,当创建异步连接时, 很少用到第一种方式,经常使用的是代理方法。关于NSURLConnectionDataDelegate,我们经常使用的协议方法为一下几个:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

// 服务器接收到请求时

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response

{

}

// 当收到服务器返回的数据时触发, 返回的可能是资源片段

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data

{

}

// 当服务器返回所有数据时触发, 数据返回完毕

- (void)connectionDidFinishLoading:(NSURLConnection *)connection

{

}

// 请求数据失败时触发

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error

{

    NSLog(@"%s", __FUNCTION__);

}

最后,分析一下这几种呢网络请求的区别。

GET请求和POST请求的区别:

1. GET请求的接口会包含参数部分,参数会作为网址的一部分,服务器地址与参数之间通过 ? 来间隔。POST请求会将服务器地址与参数分开,请求接口中只有服务器地址,而参数会作为请求的一部分,提交后台服务器。

2. GET请求参数会出现在接口中,不安全。而POST请求相对安全。

3.虽然GET请求和POST请求都可以用来请求和提交数据,但是一般的GET多用于从后台请求数据,POST多用于向后台提交数据。

同步和异步的区别:

同步链接:主线程去请求数据,当数据请求完毕之前,其他线程一律不响应,会造成程序就假死现象。

异步链接:会单独开一个线程去处理网络请求,主线程依然处于可交互状态,程序运行流畅。

原文源自:http://www.cocoachina.com/ios/20140919/9691.html

时间: 2024-10-12 19:10:50

IOS 网络请求的相关文章

ios网络请求3840错误的问题

ios网络请求3840错误的问题 by 伍雪颖 Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn't be completed. (Cocoa error 3840.)" (Unterminated string around character 11080.) UserInfo=0x171065d00 {NSDebugDescription=Unterminated string around charac

iOS网络请求框架:MKNetWorkKit的使用

MKNetWorkKit是由一个印度小伙子写的,是用于网络请求的库,支持ARC,我fork了一下,代码的网址这里给出. 本人fork作者代码地址(DoubleYi):https://github.com/DoubleYi/MKNetworkKit 作者源码地址(MugunthKumar):https://github.com/MugunthKumar/MKNetworkKit 作者关于类库介绍的地址(MugunthKumar):http://blog.mugunthkumar.com/produ

 iOS 网络请求缓存:NSURLCache详解

我读过一些开源项目的网络请求缓存的代码,基本上都是采用在本地存文件的方式进行缓存.如果你打算在你的项目中加入网络请求的缓存,可能你并不需要自己造一个轮子,了解一下 NSURLCache 就足够.本文为大家接收的就是ios开发中的NSURLCache相关使用,一起来看看吧. 缓存 首先, NSURLCache 提供的是内存以及磁盘的综合缓存机制.许多文章谈到,使用NSURLCache 之前需要在 AppDelegate 中缓存空间的设置: - (BOOL)application:(UIApplic

IOS 网络请求方式

iOS开发中的网络请求 今天来说说关于iOS开发过程中的网络请求. 关于网络请求的重要性我想不用多说了吧.对于移动客户端来说,网络的重要性不言而喻.常见的网络请求有同步GET, 同步POST, 异步GET, 异步POST.今天来看一下四种网络请求的实现方式. 一.同步GET 1 2 3 4 5 6 7 8 9 10 11 12 // 1.将网址初始化成一个OC字符串对象 NSString *urlStr = [NSString stringWithFormat:@"%@?query=%@®ion

iOS网络请求基础

这篇是关于网络请求的,结合公司的实际情况编写,如果有不同意见欢迎留言共同讨论. iOS在9.0之后彻底放弃了NSURLConnection,现在已经改用了NSURLSession进行网络请求.一般现在网络请求也都是使用AFNetworking.下面就把我自己关于afn和系统的api使用写下来. 一.使用NSURLSession 移动端的网络请求主要是get请求和post请求, get和post请求步骤差不多,只不过post对于信息的传送更安全,post请求会设置body而且会对body进行加密,

ios 网络请求总结加强对中文的处理 问题:URL不允许写中文 在GET请求中,相关代码段打断点以验证。

开发还是需要多多练习的 ,下面是一些常用的步骤: 一.简单说明 创建Get 请求 //    1.设置请求路径 NSString *urlStr=[NSString stringWithFormat:@"http://192.168.1.53:8080/MJServer/login?username=%@&pwd=%@",self.username.text,self.pwd.text]; NSURL *url=[NSURL URLWithString:urlStr]; //

iOS 网络请求NSURLSession

iOS 7 和 Mac OS X 10.9 Mavericks 中一个显著的变化就是对 Foundation URL 加载系统的彻底重构. 现在已经有人在深入苹果的网络层基础架构的地方做研究了,所以我想是时候来分享一些对于我对于这些新的 API 的看法和心得了,新的 API 将如何影响我们编写程序,以及它们对于 API 设计理念的影响. NSURLConnection 作为 Core Foundation / CFNetwork 框架的 API 之上的一个抽象,在 2003 年,随着第一版的 S

iOS 网络请求 笔记

有关网络请求的类(该图片来自:developer.apple.com) 一.url请求 网络请求的组成部分有服务器地址.请求参数,以及请求方式.在iOS中,一个网络请求用NSURLRequest(或者其子类NSURLMutableRequest)来表示. NSURLRequest适合于get请求,NSURLMutableRequest可以是post请求. get方式下,服务器地址和请求参数都可以明文包含在url中,可以直接使用这个url来创建NSURLRequest(或者NSURLMutable

iOS网络请求

1.     同步GET请求       //第一步,创建URL       NSURL *url = [NSURL URLWithString:@"http://api.hudong.com/iphonexml.do?type=focus-c"];               //第二步,通过URL创建网络请求       NSURLRequest *request = [[NSURLRequest alloc]initWithURL:url cachePolicy:NSURLReq