iOS网络篇4-利用NSURLConnection实现GET/POST/HEAD请求

iOS 开发中,我们可以利用NSURLConnection实现GET/POST请求

一、NSURLConnection三种请求方式

1.发送同步请求(返回NSData数据)

[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];

在当前线程执行,返回NSData数据

2.发送异步请求(利用block)

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

NSLog(@"返回数据:%@",data);

}];

在异步线程执行,请求成功后,在block回调函数里拿到返回的数据体

3.发送异步请求(利用代理)

NSURLConnection *connection = [NSURLConnection alloc] init];

connection.delegate = self;

在异步线程执行,请求成功后,调用代理的相关方法拿到相应的数据,这种方法适合大文件分段下载。

/**1.接收到服务器的响应 */
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
}
/**2.接收到服务器的数据*/
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
}
/**3.服务器的数据接收完毕*/
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
}
/**4.请求错误*/
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
}

二、GET请求

1.如果有参数,直接拼接在URL后面,用?隔开,且每个参数用&分开.

利用NSURLConnection不需要包含请求行和请求头,底层以及包装好,且默认就是get请求.我们只需加载指定URL资源,创建请求,发送请求即可。

示例程序:访问服务器登录界面

    //1.资源字符串
    NSString *urlStr = @"http://127.0.0.1/login.php?name=张三&password=1234";
    //如果字符串里面含有中文要进行转码
    urlStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    //2.创建资源路径
    NSURL *url = [NSURL URLWithString:urlStr];
    //3.创建请求
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    //4.发送请求
    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
        NSLog(@"%@",data);
    }];

二、post请求

利用NSURLConnection,由于默认是GET请求,所以要申明请求方法为POST,且需要封装请求体

    //1.资源字符串
    NSString *urlStr = @"http://127.0.0.1/login.php";
    //如果字符串里面含有中文要进行转码
    //urlStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

    //2.设置请求路径
    NSURL *url = [NSURL URLWithString:urlStr];

    //3.创建请求
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; // 默认就是GET请求
    request.timeoutInterval = 5; // 设置请求超时
    request.HTTPMethod = @"POST"; // 设置为POST请求
    //4.设置请求体
    NSString *param = [NSString stringWithFormat:@"name=%@&password=%@",name, password];//name和password一般从输入框取得
    request.HTTPBody = [param dataUsingEncoding:NSUTF8StringEncoding];

    //5.发送请求
    NSOperationQueue *queue = [NSOperationQueue mainQueue];
    [NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {  // 当请求结束的时候调用
       NSLog(@"返回数据-%@",data);
    }];

三、head请求

其实head请求和get请求差不多,只不过是服务器只返回响应头,不返回具体数据,这可以帮助我们后面讲解下载文件时如何获得文件大小

NSURL *url = [NSURL URLWithString:@"http://127.0.0.1/images/xhr.png"];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    request.HTTPMethod = @"HEAD";
    NSURLResponse *response = nil;
    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {

      NSLog(@"文件长度-%lld",response.expectedContentLength; 
}];

相比较而言,post请求比get请求安全,get请求所有数据暴露在URL中,post数据封装在请求体中, 不过通过fireFox也能查看到post的请求体,对于网页服务器开发,firefox是个利器,强烈推荐。

对于数据安全这块不用担心,后面会讲解如何对数据进行加密处理.

时间: 2024-12-15 08:44:36

iOS网络篇4-利用NSURLConnection实现GET/POST/HEAD请求的相关文章

iOS网络篇2-http协议通信规则

超文本传送协议 (HTTP-Hypertext transfer protocol) 定义了客户端与服务器之间通信的传输规则.目前最新的版本是1.1,HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型. 一.特点: 1.支持客户/服务器模式.支持基本认证 和安全认证. 2. 简单快速:客户向服务器请求服务时,只需传送请求方法和路径.请求方法常用的有GET.HEAD.POST.每种方法规定了客户与服务器联系的类型不同.由于HTTP协议简单,使得HTTP服务器的程序规模小,因而

IOS网络篇1之截取本地URL请求(NSURLProtocol)

本文转载至 http://blog.csdn.net/u014011807/article/details/39894247 NSURLProtocol 是iOS中非常重要的一个部分,我们经常会在以下地方用到它: (1)网络请求代理转发(FQ 网络加速等) (2)离线缓存策略 总之,只要是需要对本地的URL请求进行截获的,我们都需要使用这个东东. IOS中我们经常使用的网络请求NSURLConnection以及WebView的页面加载都会被NSURLProtocol截获,因此这个部分的核心就是如

iOS网络编程——Day4(使用NSURLConnection异步方式获取数据)

XCode7使用HTTPS通信,在info.plist文件中加一个属性@{@"NSAppTransportSecurity":@{@"NSAllowsArbitraryLoads":YES}} 接口网站:http://www.webxml.com.cn xml  国际标准 json 流行标准 get: 使用简单,接口外露不安全 //QQ在线查询的接口宏定义GET#define QQOnlineURL_GET @"http://webservice.webx

iOS网络篇1-简单搭建Apache服务器

不管是任何移动应用,为了保持生命力必须和网络进行数据反馈,为了便于开发,这里简单实现如何在mac上本地搭建用于开发测试的服务器. web服务器主要功能是提供网上信息浏览服务,服务器是一种被动程序,只有当客户端发出请求时才会作出响应, 最常用的Web服务器是Apache和Microsoft的Internet信息服务器IIS,其实说白了web服务器就是一台在Internet上具有独立IP地址的计算机,同时也指管理服务器的程序. 一.搭建目标: 1>搭建Apache服务器 2>支持PHP脚本语言 首

IOS网络篇

一.同步GET请求方法 -(void)synchronizationGet { NSString *strURL = @"http://olasapi.sinaapp.com//index.php"; NSURL *url = [NSURL URLWithString:strURL]; NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url]; NSData *data = [NSURLConnection sendS

iOS网络篇3-利用UIWebView做一个浏览器功能

在UIkit中,苹果封装了一个特别好用的控件UIWebView能够实现简单的网页加载和文件加载 一.加载网页资源 1.首先新建一个singleView项目,在storyboard拖如下控件 2.设置相关属性连接如下 3.在ViewController.m里的类扩展遵守UISearchBarDelegate和UIWebViewDelegate @interface ViewController () <UISearchBarDelegate,UIWebViewDelegate> /**网页展示*

iOS开发网络篇—NSURLConnection基本使用

iOS开发网络篇—NSURLConnection基本使用 一.NSURLConnection的常用类 (1)NSURL:请求地址 (2)NSURLRequest:封装一个请求,保存发给服务器的全部数据,包括一个NSURL对象,请求方法.请求头.请求体.... (3)NSMutableURLRequest:NSURLRequest的子类 (4)NSURLConnection:负责发送请求,建立客户端和服务器的连接.发送NSURLRequest的数据给服务器,并收集来自服务器的响应数据 二.NSUR

iOS开发网络篇—大文件的多线程断点下载(转)

http://www.cnblogs.com/wendingding/p/3947550.html iOS开发网络篇—多线程断点下载 说明:本文介绍多线程断点下载.项目中使用了苹果自带的类,实现了同时开启多条线程下载一个较大的文件.因为实现过程较为复杂,所以下面贴出完整的代码. 实现思路:下载开始,创建一个和要下载的文件大小相同的文件(如果要下载的文件为100M,那么就在沙盒中创建一个100M的文件,然后计算每一段的下载量,开启多条线程下载各段的数据,分别写入对应的文件部分). 项目中用到的主要

iOS开发网络篇—数据缓存

iOS开发网络篇—数据缓存 一.关于同一个URL的多次请求 有时候,对同一个URL请求多次,返回的数据可能都是一样的,比如服务器上的某张图片,无论下载多少次,返回的数据都是一样的. 上面的情况会造成以下问题 (1)用户流量的浪费 (2)程序响应速度不够快 解决上面的问题,一般考虑对数据进行缓存. 二.缓存 为了提高程序的响应速度,可以考虑使用缓存(内存缓存\硬盘缓存) 第一次请求数据时,内存缓存中没有数据,硬盘缓存中没有数据. 缓存数据的过程 当服务器返回数据时,需要做以下步骤 (1)使用服务器