复制直接用
<span style="font-size:18px;"> Post同步请求
- (void)synchronouRequestByPost
{
// 创建网址对象(有中文先转化)
NSURL *url = [NSURL URLWithString:kNewsListURL];
// 利用网址对象 创建请求
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:(NSURLRequestUseProtocolCachePolicy) timeoutInterval:10];
// 设置一个标识 (POST请求需要添加标识符)
[request setHTTPMethod:@"Post"];
// 把字符串转化成data使用UTF-8编码格式(携带的请求体)
NSData *data = [kNewsListParam dataUsingEncoding:NSUTF8StringEncoding];
// 注意区别: Post请求可以携带一个请求体
[request setHTTPBody:data];
// 继续创建同步链接
NSData *NewData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
// 解析数据
NSDictionary *dataDic = [NSJSONSerialization JSONObjectWithData:NewData options:(NSJSONReadingMutableContainers) error:nil];
NSLog(@"%@",dataDic);
}
Post异步请求
1. 代理方法
- (void)asynchronouRequestByPost
{
NSURL *url = [NSURL URLWithString:kNewsListURL];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:(NSURLRequestUseProtocolCachePolicy) timeoutInterval:10];
[request setHTTPMethod:@"Post"];
NSData *data = [kNewsListParam dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:data];
self.connection = [NSURLConnection connectionWithRequest:request delegate:self];
[self.connection start];
}
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
self.recdata = [NSMutableData data];
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
[self.recdata appendData:data];
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
NSDictionary *dicData = [NSJSONSerialization JSONObjectWithData:self.recdata options:(NSJSONReadingMutableContainers) error:nil];
NSLog(@"%@",dicData);
}
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
NSLog(@"请求失败");
}
2.blcok方法
- (void)asynchronouRequestByPost
{
NSURL *url = [NSURL URLWithString:kNewsListURL];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:(NSURLRequestUseProtocolCachePolicy) timeoutInterval:10];
[request setHTTPMethod:@"Post"];
NSData *data = [kNewsListParam dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:data];
// [NSOperationQueue mainQueue] 代表回到主线程
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
// 当数据请求完成的时候 会执行这个block
NSLog(@"%@",data);
// 判断是否在主线程
NSLog(@"%d",[NSThread isMainThread]);
}];
}
Get同步请求
// 同步请求会造成 程序的卡顿(只有当请求完成 才会恢复对界面的操作 用户的体验差很)
- (void)synchronouRequestByGet
{
// 转化一下编码格式
// NSString *newStr = [kSearchURL stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLFragmentAllowedCharacterSet]];
// 注意 如果网址中有中文, 需要转化一下格式
NSString *newStr = [kSearchURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
// 把字符串的网址转化成网址对象
NSURL *url = [NSURL URLWithString:newStr];
// 创建一个请求
// timeoutInterval 请求超时的时间 /s
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:(NSURLRequestUseProtocolCachePolicy) timeoutInterval:10];
// 设置一个请求的标识
// 注意 加标识符这步很重要
[request setHTTPMethod:@"Get"];
// 利用这个请求 创建一个链接
NSError *error = nil;
// 创建空的服务器响应信息
NSURLResponse *response = nil;
// 建立同步链接 并得到返回的数据(data)
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
// 解析数据
NSMutableDictionary *dataDic = [NSJSONSerialization JSONObjectWithData:data options:(NSJSONReadingMutableContainers) error:nil];
}
Get异步请求
1.代理方法
- (void)asynchronouRequestByGet
{
// 获取网址对象(有中文需要转码)
NSString *urlStr = [kSearchURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
// 利用网址, 创建网址对象
NSURL *url = [NSURL URLWithString:urlStr];
// 利用网址对象 创建一个请求
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:(NSURLRequestUseProtocolCachePolicy) timeoutInterval:10];
// 标识请求的类型
[request setHTTPMethod:@"Get"];
#pragma 代理方法 -- 异步链接
// 利用请求创建一个异步链接(connection要写成属性,在dealloc中cancel)
self.connection = [NSURLConnection connectionWithRequest:request delegate:self];
// 开始链接
[self.connection start];
}
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
// 链接成功时 创建data
self.data = [NSMutableData data];
NSLog(@"已经接收到服务器的响应信息,说明链接成功了");
NSLog(@"%@",response);
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
// 可能多次触发这个方法才能接受到完成的data 所以这个时候需要拼接一下data
[self.data appendData:data];
NSLog(@"接收到数据触发的方法");
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
NSLog(@"已经完成数据加载触发的方法");
// 解析数据
NSMutableDictionary *dataDic = [NSJSONSerialization JSONObjectWithData:self.data options:(NSJSONReadingMutableContainers) error:nil];
// 剥皮
// 如果在tableView上显示的话 注意要刷新界面;
}
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
NSLog(@"请求失败时触发 %@",error);
}
2.block方法
- (void)asynchronouRequestByGet
{
// 获取网址对象(有中文需要转码)
NSString *urlStr = [kSearchURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
// 利用网址, 创建网址对象
NSURL *url = [NSURL URLWithString:urlStr];
// 利用网址对象 创建一个请求
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:(NSURLRequestUseProtocolCachePolicy) timeoutInterval:10];
// 标识请求的类型
[request setHTTPMethod:@"Get"];
#pragma block异步链接方法
// [NSOperationQueue mainQueue] 代表回到主线程
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
// 当数据请求完成的时候 会执行这个block
NSLog(@"%@",data);
// 判断是否在主线程
NSLog(@"%d",[NSThread isMainThread]);
}];
}</span>