网络接口 使用NSURLConnection完成Get和Post方法

什么是URL:

URL就是统一资源定位器(UniformResourceLocator:URL)。通俗地说,它是用来指出某一项信息的所在位置及存取方式;更严格一点来说,URL就是在WWW上指明通讯协议以及定位来享用网络上各式各样的服务功能。

这个URL一般分为两个部分:

第一部分:

模式/协议(scheme):它告诉浏览器如何处理将要打开的文件。最常用的模式是超文本传输协议(Hypertext
TransferProtocol,缩写为HTTP),这个协议可以用来访问网络。

第二部分:

文件所在的服务器的名称或IP地址,后面是到达这个文件的路径和文件本身的名称。服务器的名称或IP地址后面有时还跟一个冒号和一个端口号。它也可以包含接触服务器必须的用户名称和密码。路径部分包含等级结构的路径定义,一般来说不同部分之间以斜线(/)分隔。询问部分一般用来传送对服务器上的数据库进行动态询问时所需要的参数。

例如一个一般的URL接口为:http://ww1.sinaimg.cn/bmiddle/78c23a17jw1enanjhtsilj20c77fnb29.jpg

Get和Post方法介绍:

Get方法是直接讲参数放到了我们的路径的后面的,然后长度也有一定的限制,数据安全性不高。

下面是一个get接口:

http://xxxxx.yyyyyy.com:8001/mall/list.php?page2=1&cid=4

前面和之前的那个接口一样,后面?之后是我们要上传的参数,多个参数之间,我们可以使用&隔开。

Post方法是就相对复杂一点了,他将参数和路径分开来了。而且他的参数是没有限制的,然后安全性也比较高。

其实这两个方法在参数比较小的时候,是可以相互转换的。我们将get中路径后面的参数放到了post中的参数体中,我们同样也可以调用这个接口里面的数据。

简单概述网络接口调用方法的大致流程:

1.创建一个NSString类型的path

2.根据这个path创建一个NSURL类型的url

3.通过url创建一个NSMutableURLRequest类型的request

4.使用NSURLConnection中的方法来加载网络数据。

网络接口调用方法代码及解释:

网络接口调用分为同步操作和异步操作;然后调用一个接口,我们一般可以使用post和get两种方法。这边通过四个例子来说明接口调用的四种操作:同步get操作,同步post操作,异步get操作和异步post操作。

同步get操作:

  NSURLResponse *response;
NSError *error;
NSString *path = [NSString stringWithFormat:@"http://kaiyi.3tichina.com:8001/mall/list.php?page=1&catid=4"];
NSURL *url = [NSURL URLWithString:path];
NSMutableURLRequest *GetURLRequest = [[NSMutable URLRequestalloc] initWithURL:url];
[GetURLRequest setHTTPMethod:@"GET"];
NSData *data1 = [NSURLConnection sendSynchronousRequest:GetURLRequest returningResponse:&response error:&error];<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> </span>

函数解释:这边我们使用了NSURLConnection的类方法来执行接口网络数据加载的操作:NSData *data1 =[NSURLConnection sendSynchronousRequest:GetURLRequest
returningResponse:&response
error:&error];

然后我们将接口的获得的error,response,data信息都返回到了之前设置的变量中。

异步get操纵:

NSString *stirng = @"http://kaiyi.3tichina.com:8001/mall/list.php?page=1&catid=4";
NSURL *url = [NSURLURLWithString:stirng];
NSMutableURLRequest *request = [[NSMutableURLRequestalloc] initWithURL:url];
[request setHTTPMethod:@"GET"];
NSOperationQueue *queue = [[NSOperationQueuealloc] init];
__weak mianViewController *weakSelf = self;
[NSURLConnection sendAsynchronousRequest:request queue:queuecompletionHandler:^(NSURLResponse *response,NSData *data, NSError *connectionError) {
NSLog(@"responseis %@", response);
NSLog(@"datais %@", data);
NSLog(@"connectionErroris %@", connectionError);
weakSelf.textDetail = [[NSStringalloc] initWithData:dataencoding:NSUTF8StringEncoding];
dispatch_async(dispatch_get_main_queue(), ^{
//界面的重新加载
[weakSelf loadViewUI];
}); }];

这个函数中,我们使用的接口调用方法是NSURLConnection的类方法,sendAsynchronousRequest,我们将请求数据设置,然后将异步操纵执行的队列设置好,然后将这些参数传入到sendAsynchronousRequest方法中去。这个方法就在异步执行了。需要注意的是,这个方法里面有一个代码块,我们将我们想要执行的操纵放到这个代码块中去,通过这种操作来调用接口中的参数。

这里我们需要注意下我们在代码块中调用self时,我们使用的是weakself,因为如果我们直接使用self的话,这会在一定造成内存的丢失。

还有就是如果我们想要对我们的界面进行操作的话,我们必须要返回我们的主线程中去。

使用NSURLConnection代理方法来完成数据调用:

-(void) loadDataofGetSysDelegate{
NSString *path = [NSStringstringWithFormat:@"http://kaiyi.3tichina.com:8001/mall/list.php?page=1&catid=4"];
NSURL *url = [NSURLURLWithString:path];
NSMutableURLRequest *request = [[NSMutableURLRequestalloc] initWithURL:url];
[request setHTTPMethod:@"GET"]; NSURLConnection *connection = [[NSURLConnectionalloc] initWithRequest:requestdelegate:self];
[connection start];
}

通过上面的这两个方法

NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];

[connection start];

我们完成了NSURLConnection的创建,接下来,我们就可以在NSURLConnection中完成我们提取数据操作了。

NSURLConnection的代理方法有:

@protocol NSURLConnectionDataDelegate <NSURLConnectionDelegate>
@optional
- (NSURLRequest *)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)response;
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response; - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data; - (NSInputStream *)connection:(NSURLConnection *)connection needNewBodyStream:(NSURLRequest *)request;
- (void)connection:(NSURLConnection *)connection didSendBodyData:(NSInteger)bytesWritten
totalBytesWritten:(NSInteger)totalBytesWritten
totalBytesExpectedToWrite:(NSInteger)totalBytesExpectedToWrite; - (NSCachedURLResponse *)connection:(NSURLConnection *)connection willCacheResponse:(NSCachedURLResponse *)cachedResponse; - (void)connectionDidFinishLoading:(NSURLConnection *)connection;
@end

Post方法同步加载数据

NSString *path = @"http://kaiyi.3tichina.com:8001/member/userinfo.php";
NSURL *url = [NSURLURLWithString:path];
NSString *prama = [NSStringstringWithFormat:@"userid=1"];
NSData *pramaData = [pramadataUsingEncoding:NSUTF8StringEncoding];
NSMutableURLRequest *request = [[NSMutableURLRequestalloc] initWithURL:url];
request.HTTPMethod = @"POST";
request.timeoutInterval = 5.0;
request.HTTPBody = pramaData; NSURLConnection *connection = [[NSURLConnectionalloc] initWithRequest:requestdelegate:self startImmediately:YES];
[connection start];

其实,get方法和post方法是差不多的,get方法将参数放到了URL路径的后面,而post方法是将参数放到了HTTPBody方法中,这里我们需要注意下。我们设置post方法的时候,需要用NSMutableURLRequest的变量。

下面是异步post操作:

  NSString *path =@"http://kaiyi.3tichina.com:8001/member/userinfo.php";
NSURL *url = [NSURLURLWithString:path];
NSString *param =@"userid=1";
NSMutableURLRequest *request = [[NSMutableURLRequestalloc] initWithURL:url];
request.HTTPMethod =@"POST";
request.HTTPBody = [paramdataUsingEncoding:NSUTF8StringEncoding]; NSOperationQueue *queue = [[NSOperationQueuealloc] init];
[NSURLConnectionsendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *response,NSData *data, NSError *connectionError) {
self.textDetail = [[NSStringalloc] initWithData:dataencoding:NSUTF8StringEncoding];
dispatch_async(dispatch_get_main_queue(), ^{
[selfloadViewUI];
});
}];

网络接口 使用NSURLConnection完成Get和Post方法的更多相关文章

  1. NSURLConnection经常使用的代理方法

    NSURLConnection的代理Protocol定义有三类:NSURLConnectionDelegate.NSURLConnectionDataDelegate和NSURLConnectionD ...

  2. NSURLSession/NSURLConnection的上传文件方法(已做了更新)

    最好的学习方法就是 领悟 + 证悟. 此篇文章的理论基础主要是与HTTP网络通信协议相关.为集中精力,可以先把TCP/IP协议这些置之不理,也就是先只关注HTTP的请求和响应的结构.HTTP完整的原理 ...

  3. iOS开发——网络篇——HTTP/NSURLConnection(请求、响应)、http响应状态码大全

    一.网络基础 1.基本概念> 为什么要学习网络编程在移动互联网时代,移动应用的特征有几乎所有应用都需要用到网络,比如QQ.微博.网易新闻.优酷.百度地图只有通过网络跟外界进行数据交互.数据更新, ...

  4. NSURLConnection、NSURLSession 补充

    一.大文件下载1.方案:利用NSURLConnection和它的代理方法1> 发送一个请求 // 1.URL NSURL *url = [NSURL URLWithString:@"h ...

  5. 【iOS基础】NSURLConnection

    一.大文件下载1.方案:利用NSURLConnection和它的代理方法1> 发送一个请求 // 1.URL NSURL *url = [NSURL URLWithString:@"h ...

  6. 从 NSURLConnection 到 NSURLSession

    iOS 7 和 Mac OS X 10.9 Mavericks 中一个显著的变化就是对 Foundation URL 加载系统的彻底重构. 现在已经有人在深入苹果的网络层基础架构的地方做研究了,所以我 ...

  7. 如何在 Linux 中查看可用的网络接口

    在我们安装完一个 Linux 系统后最为常见的任务便是网络配置了.当然,你可以在安装系统时进行网络接口的配置.但是,对于某些人来说,他们更偏爱在安装完系统后再进行网络的配置或者更改现存的设置.众所周知 ...

  8. (转) 网络GET、POST方法

    在iOS中,常见的发送HTTP请求(GET和POST)的解决方案有 苹果原生(自带) NSURLConnection:用法简单,最古老最直接的一种方案 NSURLSession:iOS7新出的技术,功 ...

  9. IOS NSURLConnection(大文件下载)

    NSURL:请求地址 NSURLRequest:一个NSURLRequest对象就代表一个请求,它包含的信息有 一个NSURL对象 请求方法.请求头.请求体 请求超时 … … NSMutableURL ...

随机推荐

  1. redis 服务器端命令

    redis 127.0.0.1:6380> time ,显示服务器时间, 时间戳(秒), 微秒数 1) "1375270361" 2) "504511" ...

  2. WAMP中修改mysql默认空密码

    WAMP中如何修改mysql默认空密码 WAMP安装好后,mysql教程密码是为空的,那么要如何修改呢?其实很简单,通过几条指令就行了,下面我就一步步来操作.首先,通过WAMP打开mysql控制台.提 ...

  3. BAE 环境下配置 struts2 + spring + hibernate(SSH)(二)struts2

    在myeclipse下开发的 应用但是 放到BAE下就出现了问题,虽然显示发布成功,但是访问的时候就会出现503 Service Unavailable 错误.通过调整 web.xml 发现纯Serv ...

  4. App Store生存指南

    资格获取   如果已经有App Store开发帐号请跳过此节.   App Store的资格获取其实一直以来都不算难,和其它事情一样,需要的只是耐心.现在苹果对申请者的文书手续要求已经比几年前简化多了 ...

  5. JSP HTML区别

    1.最简单的区别就是,HTML能直接打开,jsp只能发布到Tomact等服务器上才能打开2.定义上HTML页面是静态页面可以直接运行,JSP页面是动态页它运行时需要转换成servlet.3.他们的表头 ...

  6. test知识

    内部测试SIT ——system integration testcase 用户测试UAT——user acceptance test SIT是集成测试UAT是验收测试从时间上看,UAT要在SIT后面 ...

  7. Solr4.8.0源码分析(20)之SolrCloud的Recovery策略(一)

    Solr4.8.0源码分析(20)之SolrCloud的Recovery策略(一) 题记: 我们在使用SolrCloud中会经常发现会有备份的shard出现状态Recoverying,这就表明Solr ...

  8. core dump

    Core Dump?! 整理:Wilbur Lang 何谓 core? 在使用半导体作为内存的材料前,人类是利用线圈当作内存的材料(发明 者为王安),线圈就叫作 core ,用线圈做的内存就叫作 co ...

  9. ORACLE WIN7安装过程截图

    尽管 有点不正规,但还可以.

  10. 一步一步学习SignalR进行实时通信_8_案例2

    原文:一步一步学习SignalR进行实时通信_8_案例2 一步一步学习SignalR进行实时通信\_8_案例2 SignalR 一步一步学习SignalR进行实时通信_8_案例2 前言 配置Hub 建 ...