网络接口 使用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 ...
随机推荐
- 知识备忘phpcms 简单解析一 数据表字段
PHPCMS V9帮助中心 数据结构 phpcms v9 数据... phpcms v9 数据... PHPSSO 数据库结... phpcms v9 数据表结构 在线版 PHPCMS V9 数据结构 ...
- phpcms栏目调用
{loop subcat(0,0,0,$siteid) $r} {php $num++} <h3><a href="{$r[url]}">{$r[catna ...
- 传值 UI考试知识点
传值: 1. 属性传值:从前往后 2. 代理传值:从后往前 3. block: 4. 单例:普通写法和GCD写法 5 . 通知 NSNotification GCD 单例: static PlayMu ...
- bzoj2734: [HNOI2012]集合选数
Description <集合论与图论>这门课程有一道作业题,要求同学们求出{1, 2, 3, 4, 5}的所有满足以 下条件的子集:若 x 在该子集中,则 2x 和 3x 不能在该子集中 ...
- operation 多线程
2.Cocoa Operation 优点:不需要关心线程管理,数据同步的事情.Cocoa Operation 相关的类是 NSOperation ,NSOperationQueue.NSOperati ...
- oracle积累继续
选出当天的日期的数据 select * from test_table where to_char(datetime, 'yyyy-mm-dd')=to_char(sysdate,'yyyy-mm-d ...
- Timus1132(二次剩余方程求解)
题目:http://acm.timus.ru/problem.aspx?space=1&num=1132 题意:就是给出方程,p为素数,求在区间内的解. 这个思路很简单,详见:http://a ...
- 【HDOJ】3329 The Flood
超简单BFS. /* 3329 */ #include <iostream> #include <queue> #include <cstdio> #include ...
- 学习C++所需看的书和顺序
初学: <C++ 编程思想> <C++ Primer><The C++ Programming Language> 提高: <C++ 的发展与演化> & ...
- 转:给C++初学者的50个忠告
转:给C++初学者的50个忠告 1.把C++当成一门新的语言学习(和C没啥关系!真的.): ...