#pragma mark - 简单网络请求
- (IBAction)simpleRequest:(id)sender {
//1.构造URL
NSURL *url = [NSURL URLWithString:@"http://news-at.zhihu.com/api/3/news/latest"];
//2.构造Request
NSURLRequest *request = [NSURLRequest requestWithURL:url];
//3.构造Session
NSURLSession *session = [NSURLSession sharedSession];
//4.构造要执行的任务task
/**
* task
*
* @param data 返回的数据
* @param response 响应头
* @param error 错误信息
*
*/
NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
NSLog(@"response: %@", response);
if (error == nil) {
/*
NSString *dataStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"data: %@", dataStr);
*/
//json --> data 用JSON对象创建data
//NSJSONSerialization *jsonData = [NSJSONSerialization dataWithJSONObject:<#(id)#> options:<#(NSJSONWritingOptions)#> error:<#(NSError *__autoreleasing *)#>]
/*
options:
1.读取reading
NSJSONReadingMutableContainers 生成可变的对象,不设置这个option,默认是创建不可变对象
NSJSONReadingMutableLeaves 生成可变的字符串MutableString(iOS7+有bug)
NSJSONReadingAllowFragments 允许json数据最外层不是字典或者数组
2.写入writing
NSJSONWritingPrettyPrinted 生成json数据是格式化的,有换行,可读性高
*/
//data --> json 用data创建json
NSJSONSerialization *jsonData = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
NSLog(@"json: %@", jsonData);
//JSONKit 开源框架
} else {
//处理相应的错误
}
}];
//5.发送请求
[task resume];
}
#pragma mark - GET请求
- (IBAction)getRequest:(id)sender {
//GET请求, 也可以给服务器发送信息, 也有参数(微博用户名,用户id)
//1.构造URL, 参数直接拼接在url连接后
NSURL *url = [NSURL URLWithString:@"http://news-at.zhihu.com/api/3/news/4602734"];
//2.构造Request
//把get请求的请求头保存在request里
//NSURLRequest *request = [NSURLRequest requestWithURL:url];
// 参数
// (1)url
// (2)缓存策略
// (3)超时的时间, 经过120秒之后就放弃这次请求
//NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:120];
//NSURLRequest 不可变,不能动态的添加请求头信息
//可变的对象
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
//(1)设置请求方式
[request setHTTPMethod:@"GET"];
//(2)超时时间
[request setTimeoutInterval:120];
//(3)缓存策略
[request setCachePolicy:NSURLRequestReturnCacheDataElseLoad];
//(4)设置请求头其他内容
//[request setValue:<#(NSString *)#> forHTTPHeaderField:<#(NSString *)#>];
//[request addValue:<#(NSString *)#> forHTTPHeaderField:<#(NSString *)#>];
//[request setAllHTTPHeaderFields:<#(NSDictionary *)#>];
[request setValue:@"gzip" forHTTPHeaderField:@"Accept-Encoding"]; //告诉服务,返回的数据需要压缩
//3.构造Session
NSURLSession *session = [NSURLSession sharedSession];
//4.Task
NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if (error == nil) {
NSString *dataStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"data: %@", dataStr);
}
}];
//5.
[task resume];
}
#pragma mark - POST请求
- (IBAction)postRequest:(id)sender {
//POST请求
//1.构造URL
NSURL *url = [NSURL URLWithString:@"https://api.weibo.com/2/statuses/update.json"];
//2.构造Request
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
//(1)设置为POST请求
[request setHTTPMethod:@"POST"];
//(2)超时
[request setTimeoutInterval:60];
//(3)设置请求头
//[request setAllHTTPHeaderFields:nil];
//(4)设置请求体
//发微博
//请求体里需要包含至少两个参数
//access_token 指定用户的令牌(这个以后会讲)
//status 微博正文
NSString *bodyStr = @"access_token=XXXXX&status=我们想要发送的内容";
NSData *bodyData = [bodyStr dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:bodyData];
//3.构造Session
NSURLSession *session = [NSURLSession sharedSession];
//4.task
NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
NSLog(@"response : %@", response);
}];
//5.
[task resume];
}
简单网络请求/GET请求/POST请求
最新推荐文章于 2024-03-21 11:37:49 发布