get 请求,将参数直接写在访问路径上.操作简单,不过容易被外界看到,安全性不高,地址最多255字节
get
// 1.构造 url
NSString *urlStr = @"https://api.douban.com/v2/movie/us_box";
NSURL *url = [NSURL URLWithString:urlStr];
// 2. 构造 request
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setTimeoutInterval:30];
//设置请求头 三种方式
//request setAllHTTPHeaderFields:<#(NSDictionary *)#>
//request setValue:<#(NSString *)#> forHTTPHeaderField:<#(NSString *)#>
//request addValue:<#(NSString *)#> forHTTPHeaderField:<#(NSString *)#>
// 设置请求体
//request setHTTPBody:<#(NSData *)#>
// 3. 构造 session
NSURLSession *session = [NSURLSession sharedSession];
// 进入 bolck 代码块会自动开启子线程
NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if (error == nil) {
NSString *str = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
// UI 操作 需要回到主线程操作
[_textView performSelectorOnMainThread:@selector(setText:) withObject:str waitUntilDone:YES];
}
}];
// 开始 session任务
[task resume]
post 请求,将参数直接写在 body(请求体)里面, post 请求操作相对复杂,需要将参数和地址分开,不过安全性高,参数放在请求体里面,不易被捕获.
NSURL *url = [NSURL URLWithString:@”http://piao.163.com/m/movie/detail.html?app_id=1&mobileType=iPhone&ver=2.6&channel=appstore&deviceId=9E89CB6D-A62F-438C-8010-19278D46A8A6&apiVer=6&city=110000“];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL:url];
// 设置请求方式 请求时间
[request setHTTPMethod:@"POST"];
[request setTimeoutInterval:30];
// 设置请求体 与 GET 请求的不同之处 GET 请求也可以添加请求体 不过是在 URL 后面
NSString *dataStr = @"movie_id=43485";
NSData *data = [dataStr dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:data];
// 构造 session 对象
NSURLSession *session = [NSURLSession sharedSession];
// 链接服务器
NSURLSessionTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if (error == nil) {
NSString *str = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
// 回到主线程
[_textView performSelectorOnMainThread:@selector(setText:) withObject:str waitUntilDone:YES];
// 获取响应头
NSHTTPURLResponse respon = (NSHTTPURLResponse )response;
NSDictionary *dic = respon.allHeaderFields;
NSLog(@”dic:%@”,dic);
}
} ];
// 开始任务
[task resume];
NSURLSessionConfiguration
NSURL *url = [NSURL URLWithString:@”http://piao.163.com/m/cinema/list.html?app_id=1&mobileType=iPhone&ver=2.6&channel=appstore&deviceId=9E89CB6D-A62F-438C-8010-19278D46A8A6&apiVer=6&city=110000“];
NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
// 设置缓存策略
config.requestCachePolicy = NSURLRequestReturnCacheDataElseLoad;
config.timeoutIntervalForRequest = 30;
// 创建会话对象
NSOperationQueue *mainQueue = [NSOperationQueue mainQueue];
NSURLSession *session = [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:mainQueue];
NSURLSessionDataTask *task = [session dataTaskWithURL:url];
[task resume];
}
// 代理方法 当服务器开始响应的时候
- (void)URLSession:(NSURLSession )session dataTask:(NSURLSessionDataTask )dataTask
didReceiveResponse:(NSURLResponse *)response
completionHandler:(void (^)(NSURLSessionResponseDisposition disposition))completionHandler{
completionHandler(NSURLSessionResponseAllow);
}
// 数据包从服务器开始流向客户端调用的方法 可以监听下载进度
- (void)URLSession:(NSURLSession )session dataTask:(NSURLSessionDataTask )dataTask
didReceiveData:(NSData *)data
{
NSString *str = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
_textView.text = str;
}
// 加载完成或失败调用的方法
- (void)URLSession:(NSURLSession )session task:(NSURLSessionTask )task
didCompleteWithError:(NSError *)error
{
NSLog(@”加载失败”);
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];