ios网络学习------1get post异步请求
网络请求的步骤:
get请求:
#pragma mark - 这是私有方法,尽量不要再方法中直接使用属性,由于一般来说属性都是和界面关联的,我们能够通过參数的方式来使用属性 #pragma mark Get登录方法 - (void)loginWithGet:(NSString *)name pwd:(NSString *)pwd { //1确定地址NSURL NSString *urlString = [NSString stringWithFormat:@"www.baidu.com?username=%@&password=%@", name, pwd]; NSLog(@"%@",urlString); //url中,假设包括中文字符须要转换成带百分号的格式,提供给server解码(假设server用的是utf-8)。 urlString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSLog(@"%@",urlString); NSURL *url = [NSURL URLWithString:urlString]; //2建立请求NSURLRequest NSURLRequest *request = [NSURLRequest requestWithURL:url]; //3建立并启动连接NSRULConnection NSURLConnection *conn = [NSURLConnection connectionWithRequest:request delegate:self]; [conn start]; //启动连接,这是网络请求已经发生了。这是一个异步连接请求,,请求发送出去以后,就交由代理处理。 //server通知准备,准备中转数据 self.serverData = [NSMutableData data]; }
post请求:
- (void)login { NSLog(@"come here"); NSString *userName = self.nameTextField.text; NSString *pwd = self.passwordTextField.text; //[self loginWithGet:userName pwd:pwd]; //用get的方式调用 //上面一行是get方式,以下是post方式。 //1确定地址NSURL NSString *urlString = [NSString stringWithFormat:@"www.baidu.com"]; NSURL *url = [NSURL URLWithString:urlString]; //2建立请求NSMutableURLRequest(post须要用这个) NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; //1)post请求方式,网络请求默认是get方法,所以假设我们用post请求,必须声明请求方式。 [request setHTTPMethod:@"POST"]; //2)post请求的数据体,post请求中数据体时,假设有中文,不须要转换。由于ataUsingEncoding方法已经实现了转码。 NSString *bodyStr = [NSString stringWithFormat:@"username=%@&password=%@", userName, pwd]; //将nstring转换成nsdata NSData *body = [bodyStr dataUsingEncoding:NSUTF8StringEncoding]; NSLog(@"body data %@", body); [request setHTTPBody:body]; //3建立并启动连接NSRULConnection NSURLConnection *conn = [NSURLConnection connectionWithRequest:request delegate:self]; [conn start]; //启动连接,这是网络请求已经发生了。这是一个异步连接请求,,请求发送出去以后,就交由代理处理。 //服务器通知准备,准备中转数据 self.serverData = [NSMutableData data]; }
//4通过代理方法处理网络请求,遵守协议 #pragma mark 网络数据处理代理,总共同拥有五个代理方法 #pragma mark 代理方法1 接受到server的响应,server要传数据了,client做好接收准备 - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { } #pragma mark 代理方法2 接收server传输的数据,可能会多次运行 - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { //对每次传输的数据进行拼接,须要中转数据 [self.serverData appendData:data]; } #pragma mark 代理方法3 接收数据完毕,做兴许处理 - (void)connectionDidFinishLoading:(NSURLConnection *)connection { //对方法2拼接的数据,做兴许处理。 NSString *str = [[NSString alloc] initWithData:self.serverData encoding:NSUTF8StringEncoding]; //对server返回的字符串进行处理。 //1 从str中找出的username所在的位置 NSRange range = [str rangeOfString:@"username"]; //nsrange存放查找到的字符串(username)的位置和长度 NSLog(@"%@", NSStringFromRange(range)); NSString *msg = nil; if (range.location > 0) { //2曲username后面的字符串,一直到末尾 NSString *name = [str substringFromIndex:(range.location +range.length)]; NSLog(@"%@",name); //3欢迎归来 msg= [NSString stringWithFormat:@"欢迎欢迎:%@", name]; }else { msg = @"username或者password错误,请重试!"; } NSLog(@"%@", str); //提示用户登录成功 UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"提示" message:msg delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil, nil]; [alertView show]; //清空数据 self.serverData = nil; } #pragma mark 代理方法4 fserver请求失败,原因非常多(w网络环境等等); -(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { NSLog(@"网络连接请求错误%@",error.localizedDescription); //本地化的错误信息描写叙述。 } #pragma mark d代理方法5 向server发送数据,次方法仅适用于post,尤其上传文件。 /* 第一个參数是连接,第二个參数是发送的数据体,第三个表示总体要写的数据,第四个是表示预期要写的数据。server通过这些值知道这次传了多少,已经传了多少,预期总共要穿多少 */ - (void)connection:(NSURLConnection *)connection didSendBodyData:(NSInteger)bytesWritten totalBytesWritten:(NSInteger)totalBytesWritten totalBytesExpectedToWrite:(NSInteger)totalBytesExpectedToWrite { NSLog(@"发送数据给server"); } @end
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。