首页 > 代码库 > 网络请求步骤

网络请求步骤

网络请求三步骤

1> URL 确定资源

NSString *urlStr = @"";

NSURL *url = [NSURL URLWithString:urlStr];

(1)  GET  URL 中包含参数

(2)  POST  URL 中没有参数

2> 建立请求 URLRequest

(1)  GET  不需要对请求做特殊处理

    NSURLRequest

(2)  POST  需要在请求中,指定 HTTP 方法和 HTTP 数据体

    NSMutableURLRequest

    HTTPMethod = @"POST"

    HTTPBody = 包含登录信息的二进制数据

3> 发送请求

  *** 在实际开发中, 所有的网络请求都是异步的

  NSURLConnection sendAsynchronousRequest

  在请求的异步方法中, 对接收到的数据进行处理

 

*************************代码******************************

1 - (IBAction)login2 {3     [self postLogonWithUserName:self.userNameText.text password:self.pwdText.text];4 }

 

 1 #pragma mark - GET 登录 2 - (void)getLogonWithUserName:(NSString *)userName password:(NSString *)password 3 { 4     // 1. 准备资源 url 5     NSString *urlStr = [NSString stringWithFormat:@"http://127.0.0.1/login.php?username=%@&password=%@", userName, password]; 6      7     NSURL *url = [NSURL URLWithString:urlStr]; 8      9     // 2. 创建网络请求 URLRequest10     // URLRequest 默认方法就是 GET11     NSURLRequest *request = [NSURLRequest requestWithURL:url];12     13     // 3. 发送网络请求 URLConnection14     // *** 所有的网络请求,都使用异步方法15     [NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {16         17         // 1> 将返回的二进制数据,转换成字符串18         // (1)将二进制数据转换成字符串,没有直接的类方法,需要 alloc initWithData19         // (2)提示:在开发网络时,如果需要跟踪网络返回的具体内容,经常会先将 data 转换成字符串输出20         // 转换成字符串的方式,在调试中经常使用21         NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];22         NSLog(@"%@", result);23         24         // 2> JSON ,格式是和NSDictionary的快速包装格式非常像25         // 将 JSON 转换成字典26         NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];27         NSLog(@"%@", dict);28     }];29 }

 

 1 #pragma mark - POST 登录 2 - (void)postLogonWithUserName:(NSString *)userName password:(NSString *)password 3 { 4     // 1. url 5     NSString *urlStr = @"http://127.0.0.1/login.php"; 6     NSURL *url = [NSURL URLWithString:urlStr]; 7      8     // 2. requeset, POST 方法需要建立一个可变的请求 9     NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];10     // 2.1 POST方法11     request.HTTPMethod = @"POST";12     // 2.2 数据体13     NSString *bodyStr = [NSString stringWithFormat:@"username=%@&password=%@", userName, password];14     // 将字符串转换成二进制数据15     request.HTTPBody = [bodyStr dataUsingEncoding:NSUTF8StringEncoding];16     17     // 3. 发送请求18     [NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {19         20         // 1> 将返回的二进制数据,转换成字符串21         // (1)将二进制数据转换成字符串,没有直接的类方法,需要 alloc initWithData22         // (2)提示:在开发网络时,如果需要跟踪网络返回的具体内容,经常会先将 data 转换成字符串输出23         // 转换成字符串的方式,在调试中经常使用24         NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];25         NSLog(@"%@", result);26         27         // 2> JSON ,格式是和NSDictionary的快速包装格式非常像28         // 将 JSON 转换成字典29         NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];30         NSLog(@"POST 登录 === >%@", dict);31     }];32 }