使用之前,有必要了解一些基础知识
然后,再补充一点东西
NSURL:请求地址
NSURLRequest:一个NSURLRequest对象就代表一个请求,它包含 信息有
》一个NSURL对象
》请求方法,请求头,请求体
》请求超时...
》NSMutableURLRequest:NSURLRequest的子类
》NSURLConnection
1.负责发送请求,建立客户端和服务器的连接
2.发送数据给服务器,并收集来自服务器的响应数据
NSURLConnection的使用步骤
1.创建一个NSURL对象,设置请求路径
2.传入NSURL创建一个NSURLRequest对象 ,设置请求头和请求体
3.使用NSURLConnection发送请求
即先来一个URL,把url包装到request里,设置请求头、请求体,利用NSURLConnection发给服务器。服务器返回数据给NSURLConnection
由NSURLConnection来做收集与服务器之间的桥梁
NSURLConnection发送请求
1.同步请求get
-(void)sync
{
/********发送一个GET请求给服务器********/
//0.请求路径
NSURL * url = [NSURL URLWithString:@"http://120.25.226.186:32812/login?username=123&pwd=123"];
// NSURL * url = [NSURL URLWithString:@"http://120.25.226.186:32812/video"];
//1.创建请求对象
NSURLRequest * request = [NSURLRequest requestWithURL:url];
//2.发送请求
//sendSynchronousRequest 阻塞式的方法,等待服务器返回数据
NSHTTPURLResponse *response = nil;
NSError *error = nil;
NSData * data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
//3.解析服务器返回的数据(解析成字符串)
NSString * string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"%@",string);
}
核心任务就是解析
2.异步请求get(block)
-(void)asyn
{
//0.请求路径
NSURL * url = [NSURL URLWithString:@"http://120.25.226.186:32812/login?username=123&pwd=123"];
//1.创建请求对象
NSURLRequest * request = [NSURLRequest requestWithURL:url];
//2.发送请求
//参数1:NSURLRequest
//参数2:[NSOperationQueue mainQueue] 线程队列,block在哪个线程中执行,主队列,也叫串行队列
//参数3:response 携带者接口的信息 data 请求下来的数据
//队列有什么用呢?决定了解析数据在哪个线程中[NSOperationQueue mainQueue] 替换成 [[NSOperationQueue alloc] init]
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
//请求完毕会到这个block
//3.解析服务器返回的数据(解析成字符串)
NSString * string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"%@ %@",string,[NSThread currentThread]);
}];
NSLog(@"------------");
}
代理
适合做大文件下载,默认是异步请求
//遵循协议 <NSURLConnectionDataDelegate>
-(void)delegateAysnc
{
//0.创建路径
NSURL * url = [NSURL URLWithString:@"http://120.25.226.186:32812/login?username=520it&pwd=520it"];
//1.创建请求对象
NSURLRequest * request = [NSURLRequest requestWithURL:url];
//2.创建连接对象
// [[NSURLConnection alloc] initWithRequest:request delegate:self];
//或者以下方法
// NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:NO];
// [conn start];
//或者
[NSURLConnection connectionWithRequest:request delegate:self];
//取消请求
// NSURLConnection * conn = [NSURLConnection connectionWithRequest:request delegate:self];
// [conn cancel];
}
#pragma mark - NSURLConnectionDataDelegate -- begin
//接受到服务器响应
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
//创建data对象
self.responseData = [NSMutableData data];
NSLog(@"didReceiveResponse");
}
//接收到服务器数据(如果数据量比较的大,该方法会被多次调用)
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
//不断拼接服务器返回数据
[self.responseData appendData:data];
NSLog(@"didReceiveData -- %zd",data.length);
}
//服务器的数据成功接受完毕
-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
NSLog(@"connectionDidFinishLoading");
NSString * string = [[NSString alloc] initWithData:self.responseData encoding:NSUTF8StringEncoding];
NSLog(@" ---- %@",string);
}
//请求失败(比如超时 - 默认一分钟)
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
NSLog(@"didFailWithError -- %@",error);
}
#pragma mark - NSURLConnectionDataDelegate -- end
好了,总结一下
NSURLConnection发送请求
》同步请求
[NSURLConnection sendSynchronousRequest: returningResponse: error:];
》异步请求 根据服务器的返回数据的处理方式的不同,有可以分为两种
1.block回调
[NSURLConnection sendAsynchronousRequest: queue: completionHandler:]
2.代理,遵守 <NSURLConnectionDataDelegate>
[[NSURLConnection alloc] initWithRequest: delegate:]
或
[[NSURLConnection alloc] initWithRequest: delegate: startImmediately:]
startImmediately是NO,就得调用start
或
[NSURLConnection connectionWithRequest: delegate:]
然后调用代理方法