NSURLConnection简单使用
2016-07-03 16:43
330 查看
在此之前简单的介绍一下http协议以及请求格式:
HTTP协议,HyperText Transfer Protocol,超文本传输协议。是一种基于客户端-服务器的网络通信协议。
在HTTP协议中,只能由客户端主动请求服务器,服务器作出响应。 服务器不能主动连接客户端。
在HTTP协议中规定,数据以报文的形式传输。
数据报文分为请求报文和响应报文。
客户端请求服务器时,把数据封装在请求报文中发送给服务器,服务器把需要返回给客户端的数据封装在响应报文中发给客户端。
请求报文的格式:
请求报文分为三部分,请求行,请求头,请求体。
HTTP请求分为很多种请求方式,常用的又两种,GET和POST。GET请求:参数拼接在url后。POST请求:参数写在请求体中。
请求行:请求方式(空格)请求的路径(空格)HTTP版本号
(请求行和请求头之间需要有一个空行。)
请求头:请求的各种信息,例如,请求体的长度,请求体的数据类型,主机的IP地址等,这些信息不是必填的。
Host=localhost
Connection="close"
(请求头和请求体之间需要有一个空行。)
请求体:此次请求发送的主要数据(请求体可以为空)。
GET /asd/aaa/NewServlet?userName=qwe&password=123 HTTP/1.0
Host=localhost
Connection="close"
响应报文的格式
响应报文分为三部分,响应行,响应头,响应体。
响应行,HTTP版本号(空格)请求状态码
响应头,此次响应的各种信息,例如请求数据的类型,数据的长度,等。
响应体,本次请求的数据。
iOS9之前网络请求使用的都是NSURLConnection,用法如下:
在此可参考两篇文章
iOS开发 GET、POST请求方法:NSURLSession篇
iOS开发 GET、POST请求方法:NSURLConnection篇
HTTP协议,HyperText Transfer Protocol,超文本传输协议。是一种基于客户端-服务器的网络通信协议。
在HTTP协议中,只能由客户端主动请求服务器,服务器作出响应。 服务器不能主动连接客户端。
在HTTP协议中规定,数据以报文的形式传输。
数据报文分为请求报文和响应报文。
客户端请求服务器时,把数据封装在请求报文中发送给服务器,服务器把需要返回给客户端的数据封装在响应报文中发给客户端。
请求报文的格式:
请求报文分为三部分,请求行,请求头,请求体。
HTTP请求分为很多种请求方式,常用的又两种,GET和POST。GET请求:参数拼接在url后。POST请求:参数写在请求体中。
请求行:请求方式(空格)请求的路径(空格)HTTP版本号
(请求行和请求头之间需要有一个空行。)
请求头:请求的各种信息,例如,请求体的长度,请求体的数据类型,主机的IP地址等,这些信息不是必填的。
Host=localhost
Connection="close"
(请求头和请求体之间需要有一个空行。)
请求体:此次请求发送的主要数据(请求体可以为空)。
GET /asd/aaa/NewServlet?userName=qwe&password=123 HTTP/1.0
Host=localhost
Connection="close"
响应报文的格式
响应报文分为三部分,响应行,响应头,响应体。
响应行,HTTP版本号(空格)请求状态码
响应头,此次响应的各种信息,例如请求数据的类型,数据的长度,等。
响应体,本次请求的数据。
iOS9之前网络请求使用的都是NSURLConnection,用法如下:
- (void)viewDidLoad { [super viewDidLoad]; _data = [[NSMutableData alloc]init]; } - (IBAction)goClick:(UIButton *)sender { _textView.text = @""; //如果前面没有http前缀,自动加上 if (![_textField.text hasPrefix:@"http://"]) { _textField.text = [NSString stringWithFormat:@"http://%@",_textField.text]; } //url ,统一资源标示符。 NSURL *url = [NSURL URLWithString:_textField.text]; //NSURLRequest URL请求,创建一个URL请求 NSURLRequest *request = [NSURLRequest requestWithURL:url]; //NSURLConnection 创建一个请求的链接,并把链接的代理设为self NSURLConnection *connection = [NSURLConnection connectionWithRequest:request delegate:self]; //开始连接 [connection start]; } //请求失败时的回调 - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { NSLog(@"请求失败原因:\n%@",error); } //请求收到响应时回调 - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { NSLog(@"收到响应!"); //(NSData型 二进制数据)收到响应时得到一些数据就存起来拼接起来,等到接收全部数据将其转换成字符串 //step1、收到响应时,先把上次的请求清空 [_data setData:[NSData data]]; } //请求收到数据时回调,当数据量很大时,会调很多次 - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { NSLog(@"收到数据了!"); //appendData 拼接数据 append,附加,贴上 //step2、把收到的数据拼接到总数据中 [_data appendData:data]; } //请求完成时回调 - (void)connectionDidFinishLoading:(NSURLConnection *)connection { NSLog(@"请求完成!"); //中文GB 18030 编码(一个汉字占两个字节,汉字量小;UTF8一个汉字占3个字节,汉字量大) //NSStringEncoding gbkEncoding = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000); //step3、把接收来拼接好的总数据转换成字符串 NSString *string = [[NSString alloc]initWithData:_data encoding:NSUTF8StringEncoding]; _textView.text = string; [string release]; }
在此可参考两篇文章
iOS开发 GET、POST请求方法:NSURLSession篇
iOS开发 GET、POST请求方法:NSURLConnection篇
相关文章推荐
- pyqt 加载资源文件
- Git push出错
- Vigenère 密码(luogu 1079)
- storyboard文件的认识
- Flex 布局教程:语法篇
- 【NOIP2015TGD2T1】poj3258 River Hopscotch
- php配置thinkphp
- leetcode Sum of Two Integers
- C修饰符const
- 《OD学hadoop》第三周0709
- Linux : Bridge support not available: brctl not found
- hdu3538(最短哈密顿路径)
- UIView
- 探索CDN之一:初识CDN
- mac osx 安装mysql步骤
- 铺地毯(luogu 1003)
- HDU1241(bfs)JAVA
- MIPI DSI协议介绍
- 面对用户的需求设计
- Byte字节获取