NSURLConnection简单使用

在此之前简单的介绍一下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,用法如下:

- (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篇

  • 7
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值