H:/0726/01_Get+Post+代理实现_ViewController.h
H:/0726/01_Get+Post+代理实现_ViewController.m
H:/0726/02_Post请求+静态方法实现+推荐_ViewController.h
H:/0726/02_Post请求+静态方法实现+推荐_ViewController.m
//
// 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,是一个块代码。【需要我们自己制定参数!】