IOS_网络请求_get+post+同步+异步

来源:互联网 发布:淘宝怎么关闭私人定制 编辑:程序博客网 时间:2024/04/28 05:58
H:/0726/01_Get+Post+代理实现_ViewController.h
////  ViewController.h//  Get & Post Request////  Created by apple on 13-7-26.//  Copyright (c) 2013年 itcast. All rights reserved.//#import <UIKit/UIKit.h>@interface ViewController : UIViewController <NSURLConnectionDataDelegate>// 用户名@property (weak, nonatomic) IBOutlet UITextField *userNameText;// 密码@property (weak, nonatomic) IBOutlet UITextField *passwordText;// Get登录- (IBAction)getLogin:(id)sender;// Post登录- (IBAction)postLogin:(id)sender;@end

H:/0726/01_Get+Post+代理实现_ViewController.m
//  ViewController.m//  Get & Post Request//  Created by apple on 13-7-26.//  Copyright (c) 2013年 itcast. All rights reserved.#import "ViewController.h"@interface ViewController (){    // 从服务器返回的数据,别的方法中要用到    NSMutableData   *_serverData;}@end@implementation ViewController- (void)viewDidLoad{    [super viewDidLoad];}// 响应按钮点击,GET 登录- (IBAction)getLogin:(id)sender{    // 1. 确定地址URL    // 注意:你们在调试的时候,需要知道服务器的ip地址,注意用login.php    // 在定义Get的URL的时候,千万不要忘记在地址栏拼接参数    NSString *urlString = [NSString stringWithFormat:@"http://169.254.68.33/~apple/itcast/login.php?username=%@&password=%@", _userNameText.text, _passwordText.text];    NSLog(@"字符串:%@", urlString);    // 输入中文的时候,出问题了!    // 如果有中文,需要对地址字符串进行%的UTF8转码,才可以使用!!!    // stringByAddingPercentEscapesUsingEncoding  记住要“加百分号”!    NSURL *url = [NSURL URLWithString:[urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];    NSLog(@"URL:%@", url);    // 2. 通过URL,建立请求    NSURLRequest *request = [NSURLRequest requestWithURL:url];    // 3. 通过请求,建立连接,并设置代理为当前控制器    NSURLConnection *conn = [[NSURLConnection alloc]initWithRequest:request delegate:self];    // 4. "启动"连接 start    [conn start];}// 响应按钮点击,POST 登录- (IBAction)postLogin:(id)sender{    // 整个步骤的顺序和Get方法是一样的,不过需要注意的是请求的参数细节处理!    // 1. 确定地址URL    NSString *urlString = @"http://169.254.68.33/~apple/itcast/login.php/";    // 这里不需要加百分号!,因为没有中文    NSURL *url = [NSURL URLWithString:urlString];    // 2. 建立可变的URL请求    // 1)建立可变的URL请求,是要修改请求,所以要用NSMutableURLRequest    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];    // 2) 建立请求超时时间    [request setTimeoutInterval:5.0];    // 3) 指定请求方法是“POST”,注意,如果是POST,必须去指定HTTP方法。    // post字符串不区分大小写,POST    [request setHTTPMethod:@"post"];    // 4) 建立请求"数据体",因为要把这个数据体传送给服务器。    NSString *bodyString = [NSString stringWithFormat:@"username=%@&password=%@", _userNameText.text, _passwordText.text];    NSLog(@"数据体字符串:%@", bodyString);    // 将生成的字符串,用指定的编码转换成数据Data    NSData *body = [bodyString dataUsingEncoding:NSUTF8StringEncoding];    NSLog(@"%@", body);    // 5) 设置可变请求的HTTPBody    [request setHTTPBody:body];    // 3. 建立连接,并设置代理为当前控制器    NSURLConnection *conn = [[NSURLConnection alloc]initWithRequest:request delegate:self];    // 4. 启动连接    [conn start];}#pragma mark - 连接代理方法,didReceiveResponse- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{    NSLog(@"开始接受服务器的返回请求");}// 代理的这个方法会被多次调用,所以我们需要定义一个成员变量来记录完整的数据!- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{    // 做接收数据的处理

H:/0726/02_Post请求+静态方法实现+推荐_ViewController.h
////  ViewController.h//  Get & Post Request////  Created by apple on 13-7-26.//  Copyright (c) 2013年 itcast. All rights reserved.//#import <UIKit/UIKit.h>@interface ViewController : UIViewController// 用户名@property (weak, nonatomic) IBOutlet UITextField *userNameText;// 密码@property (weak, nonatomic) IBOutlet UITextField *passwordText;// 同步登录- (IBAction)syncLogin:(id)sender;// 异步登录- (IBAction)asyncLogin:(id)sender;@end

H:/0726/02_Post请求+静态方法实现+推荐_ViewController.m
//  ViewController.m//  Get & Post Request//  Created by apple on 13-7-26.//  Copyright (c) 2013年 itcast. All rights reserved.#import "ViewController.h"@interface ViewController (){}@end@implementation ViewController- (void)viewDidLoad{    [super viewDidLoad];}// 建立Post登录请求- (NSURLRequest *)postLoginRequest{    // 整个步骤的顺序和Get方法是一样的,不过需要注意的是请求的处理!    // 1. 确定地址URL    NSString *urlString = @"http://169.254.68.11/~apple/itcast/login.php/";    // 这里不需要加百分号!,因为没有中文    NSURL *url = [NSURL URLWithString:urlString];    // 2. 建立可变请求    // 1)建立可变请求,是要修改请求,所以要用NSMutableURLRequest    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];    // 2) 建立请求超时时间    [request setTimeoutInterval:5.0];    // 3) 指定请求方法是“POST”,注意,如果是POST,必须去指定HTTP方法。    // post字符串不区分大小写,POST    [request setHTTPMethod:@"post"];    // 4) 建立请求"数据体",因为要把这个数据体传送给服务器。    NSString *bodyString = [NSString stringWithFormat:@"username=%@&password=%@", _userNameText.text, _passwordText.text];    //NSLog(@"数据体字符串:%@", bodyString);    // 将生成的字符串转换成数据    NSData *body = [bodyString dataUsingEncoding:NSUTF8StringEncoding];    //NSLog(@"%@", body);    // 5) 把数据体设置给请求    [request setHTTPBody:body];    // 返回了一个完整的用户登录请求    return request;}#pragma mark - 响应按钮的点击,同步请求- (IBAction)syncLogin:(id)sender{    // 1. 通过自定义的方法返回登录请求    NSURLRequest *request = [self postLoginRequest];    // 2. 开始同步连接    // 同步请求需要几个参数    // 1) 请求,已经准备好了    // 2) 响应,所为响应,就是服务器给你的响应    // 3) 错误,因为网络连接有可能出错。    // 在写网络访问程序的时候,一定要有出错处理,提醒用户。    NSURLResponse *response = nil;    NSError *error = nil;    // 同步请求是一定返回结果后才会继续的!    NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];    // 给一个填充错误的地址,有可能会延时网络访问时间    NSLog(@"访问完成");    // 3. 获取数据    // 可能会返回什么数据?    // 1) 返回请求的结果!解码!!!!!解码成我们认识的字符串    // 2) 请求出现错误!    // 3) 返回空数据!    if (error != nil) {        NSLog(@"访问出错:%@", error.localizedDescription);        return;    }    if (data != nil) {        NSString *string = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];        // 用户登录成功之后的处理        if (string.integerValue > 0) {            NSLog(@"登录成功");            // 这里可以用navigationcontroller push 出去        } else {            NSLog(@"请重新输入");        }        NSLog(@"返回的内容是:%@", string);    } else {        NSLog(@"没有接收到数据!");    }}// 响应按钮点击,通过连接的静态方法(和代码块)发送异步登录请求,推荐~取代代理方法- (IBAction)asyncLogin:(id)sender{    // 1. 通过自定义方法,获得登录请求    NSURLRequest *request = [self postLoginRequest];    // 2. 异步登录请求    // 1) 第一个参数:请求,我们已经有了    // 2) 第二个参数:队列?所谓队列,就是在线程上面需要执行的任务列表    // 3) BLOCK,是一个块代码。【需要我们自己制定参数!】

0 0