网络接口 使用NSURLConnection完成Get和Post方法
网络接口 使用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方法的更多相关文章
- NSURLConnection经常使用的代理方法
NSURLConnection的代理Protocol定义有三类:NSURLConnectionDelegate.NSURLConnectionDataDelegate和NSURLConnectionD ...
- NSURLSession/NSURLConnection的上传文件方法(已做了更新)
最好的学习方法就是 领悟 + 证悟. 此篇文章的理论基础主要是与HTTP网络通信协议相关.为集中精力,可以先把TCP/IP协议这些置之不理,也就是先只关注HTTP的请求和响应的结构.HTTP完整的原理 ...
- iOS开发——网络篇——HTTP/NSURLConnection(请求、响应)、http响应状态码大全
一.网络基础 1.基本概念> 为什么要学习网络编程在移动互联网时代,移动应用的特征有几乎所有应用都需要用到网络,比如QQ.微博.网易新闻.优酷.百度地图只有通过网络跟外界进行数据交互.数据更新, ...
- NSURLConnection、NSURLSession 补充
一.大文件下载1.方案:利用NSURLConnection和它的代理方法1> 发送一个请求 // 1.URL NSURL *url = [NSURL URLWithString:@"h ...
- 【iOS基础】NSURLConnection
一.大文件下载1.方案:利用NSURLConnection和它的代理方法1> 发送一个请求 // 1.URL NSURL *url = [NSURL URLWithString:@"h ...
- 从 NSURLConnection 到 NSURLSession
iOS 7 和 Mac OS X 10.9 Mavericks 中一个显著的变化就是对 Foundation URL 加载系统的彻底重构. 现在已经有人在深入苹果的网络层基础架构的地方做研究了,所以我 ...
- 如何在 Linux 中查看可用的网络接口
在我们安装完一个 Linux 系统后最为常见的任务便是网络配置了.当然,你可以在安装系统时进行网络接口的配置.但是,对于某些人来说,他们更偏爱在安装完系统后再进行网络的配置或者更改现存的设置.众所周知 ...
- (转) 网络GET、POST方法
在iOS中,常见的发送HTTP请求(GET和POST)的解决方案有 苹果原生(自带) NSURLConnection:用法简单,最古老最直接的一种方案 NSURLSession:iOS7新出的技术,功 ...
- IOS NSURLConnection(大文件下载)
NSURL:请求地址 NSURLRequest:一个NSURLRequest对象就代表一个请求,它包含的信息有 一个NSURL对象 请求方法.请求头.请求体 请求超时 … … NSMutableURL ...
随机推荐
- 简单实现tab标签页切换
常见面试题: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...
- Wdcp缺少mod_rewite模块
1.下载apache源码包,解压并查找到mod_rewrite.c文件 tar -zxvf httpd-2.2.27.tar.gz cd httpd-2.2.27 [root@localhost ht ...
- jQuery简单的轮播特效
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Session和Cookie的学习笔记2
<?php /* Cookie在计算机中保存的格式 用户名@网站地址[数字].txt Cookie在文件夹下,每个Cookie文件都是一个简单而又普通的文件件而不是程序,Cookie中的内容大多 ...
- Resilio-sync auto restart
syncheck.sh #!/bin/sh if [ $(pgrep xxxrslsync) ]; then echo && date >> /home/pi/sync/s ...
- iOS - Blocks
iOS中Blocks的介绍 1. 什么是Blocks Blocks是C语言的扩充功能.就是:带有自动变量的匿名函数. 类似C语言的函数指针.但Blocks不是一个指针,而是一个不带名字的函数, ...
- gulp配置browserify多入口
需要 var es = require('event-stream'); gulp.task('browserify', function(){ var files = [ { fpath: './j ...
- Node.js事件循环
Node JS是单线程应用程序,但它通过事件和回调概念,支持并发. 由于Node JS每一个API是异步的,作为一个单独的线程,它使用异步函数调用,以保持并发性.Node JS使用观察者模式.Node ...
- Unity 网络斗地主 牌的一些算法
Unity 网络斗地主 牌的一些算法 在这儿说一下,我的项目是用svn的方式,上传在https://v2.svnspot.com/18666451713.doudizhu这个svn上,大家可以下载T ...
- Netty4.0学习笔记系列之一:Server与Client的通讯
http://blog.csdn.net/u013252773/article/details/21046697 本文是学习Netty的第一篇文章,主要对Netty的Server和Client间的通讯 ...