您的位置:首页 > 理论基础 > 计算机网络

iOS 网络编程基础

2015-09-22 09:46 471 查看
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];
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: