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

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,是一个块代码。【需要我们自己制定参数!】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值