ASIFormDataRequest是用于向表单post数据或get数据,可以用于用户向服务器端发送请求完成登录注册,上传下载数据的操作。

之前写过一篇文章是介绍使用ios内置的功能完成登录操作(NSMutableURLRequest 用法,一个结合PHP后台程序用户登录的例子),现在我们使用ASIFormDataRequest来完成用户的登录操作
首先我们在apache服务器创建一个login.php的文件,文件内容为:
<?php
header("Content-type: text/html; charset=utf-8"); 
    $username=$_POST['username'];
    $password=$_POST['password'];
    if (empty($username) && empty($password)){
            echo "您输入的值为空";
    }else{
            echo "您的姓名为:".$username;
    }
?>
接下来我们就开始我们的工作:
(关于ASIHTTPRequest这个框架的介绍及使用方法就不多说了,自己搜索或看本站相关的介绍。以后关于本站有关ASIHTTPRequest均不介绍了,也不介绍如何使用和导入)

第一步:在login.xib界面上放置一个两个登录筐,一个是用户名一个是密码,然后再放置一个登录的按钮
第二步:假设我们定义的登录文件名称为login,则login.h里面的内容为:

#import <UIKit/UIKit.h>

// 在m文件导入一个外部类,则在h文件里面定义该外部类的class名,则h文件里面无需导入外部类也可以进行访问外部类里面的内容

@class ASIFormDataRequest;
@interface login : UIViewController{

//定义一个ASIFormDataRequest对象

    ASIFormDataRequest *request;
}

//定义用户名和密码两个输入框

@property (weak, nonatomic) IBOutlet UITextField *username;
@property (weak, nonatomic) IBOutlet UITextField *password;

//定义登录按钮事件

- (IBAction)loginAction:(id)sender;
@property (retain, nonatomic) ASIFormDataRequest *request;
@property (weak, nonatomic) IBOutlet UITextView *txt;
@end

第 三步:定义login. m文件里面的内容:

#import "login.h"
#import "ASIFormDataRequest.h"
 
@interface login ()
-(void)loginFailed:(ASIHTTPRequest *)reuqest;
-(void)loginSucceed:(ASIHTTPRequest *)reuqest;
@end
 
@implementation login
@synthesize activity;
@synthesize txt;
@synthesize username;
@synthesize password;
@synthesize request;
 
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}
 
- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
}
 
- (void)viewDidUnload
{
    [self setUsername:nil];
    [self setPassword:nil];
    [self setActivity:nil];
    [self setTxt:nil];
    [super viewDidUnload];
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}
 
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
- (IBAction)loginAction:(id)sender {
    
    //先中断连接吧
    [request cancel];

//第一步,创建请求地址(创建请求地址有这两种方式,都是一样的)

    ASIFormDataRequest *request=[ASIFormDataRequest requestWithURL:[NSURL URLWithString:@"http://www.wiaphone.com/login.php"]];
    //ASIFormDataRequest *request=[[ASIFormDataRequest alloc] initWithURL:[NSURL URLWithString:@"http://www.wiaphone.com/login.php"]];
    
    NSLog(@"%@",request);
    //设置返回的数据的编码
    [request setDefaultResponseEncoding:NSUTF8StringEncoding];

//设置连接事件如果超过20秒就报错

    [request setTimeOutSeconds:20];

//使用ASIFormDataRequest必须要要写这3句话,请求成功与请求失败的情况

    [request setDelegate:self];
    [request setDidFailSelector:@selector(loginFailed:)];
    [request setDidFinishSelector:@selector(loginSucceed:)];
    
/*

在使用ios内置的功能发送post请求比较麻烦,你需要这么做:

//得到我们所输入的数据
NSString *getUserInfo=[NSString stringWithFormat:@"username=%@&password=%@",username.text,password.text];
//对传过去的数据进行编码处理,
NSData *dealPostData=[getUserInfo dataUsingEncoding:NSUTF8StringEncoding];
//得到一个url对象,使用URLWithString方法初始化一个url对象
NSURL *webController=[NSURL URLWithString:@"http://www.zpluz.com/logo.php"];
//创建一个request对象,就是说创建一个请求的对象
//NSMutableRequest是NSURLRequest的一个子类
NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:webController];
//因为我们已经创建了一个http请求对象request,所以我们需要对该对象进行请求类型设置为post(用户名和密码登陆需要进行安全请求,所以必须为post)
[request setHTTPMethod:@"POST"];
//设置http请求头部信息,比如实例中的请求地址:http://www.wiaphone.com/login.php?username=villardlee&password=123456,其中username=villardlee&password=123456就是一个http的头部信息
[request setHTTPBody:dealPostData];
//使用NSURLConnection开始发送http请求
//到这一步,NSURLConnection会自动调用一些方法(委托事件),包括接收数据委托方法(委托1);返回数据(或者说输出数据)的方法(委托2);接收数据失败(委托3)
NSURLConnection *sendRequest=[[NSURLConnection alloc] initWithRequest:request delegate:self
                                  ];

而ASIFormDataRequest简化为:
ASIFormDataRequest *request=[ASIFormDataRequest requestWithURL:[NSURL URLWithString:@"http://www.wiaphone.com/login.php"]];

[request setPostValue:self.username.text forKey:@"username"];
[request setPostValue:self.password.text forKey:@"password"];

自己仔细看看两者之间的区别吧!!

*/
    [request setPostValue:self.username.text forKey:@"username"];
    [request setPostValue:self.password.text forKey:@"password"];
    
    
    //开始进行同步请求
    [request startAsynchronous];
    NSLog(@"***************");
}
//如果请求失败
-(void)loginFailed:(ASIHTTPRequest *)reuqest{
    NSLog(@"访问失败");
    [txt setText:[NSString stringWithFormat:@"Request failed:\r\n%@",[[reuqest error] localizedDescription]]];
}

//如果请求成功

-(void)loginSucceed:(ASIHTTPRequest *)request{
    NSLog(@"访问成功");
    
    //这里的字节指的是http://www.wiaphone.com/login.php后面的传输的数据
    NSLog([NSString stringWithFormat:@"总共传送了 %llu 字节的数据",[request postLength]]);
    
    //获取请求的头部信息
    NSMutableDictionary *headerData=[request requestHeaders];
    NSLog(@"%@",headerData);
    NSLog(@"所有的键:%@",headerData.allKeys);
    NSLog(@"所有的值:%@",headerData.allValues);
    NSLog(@"User-Agent:%@",[headerData objectForKey:@"User-Agent"]);
    NSLog(@"Content-Type:%@",[headerData objectForKey:@"Content-Type"]);
    NSLog(@"Content-Length:%@",[headerData objectForKey:@"Content-Length"]);
    NSLog(@"Accept-Encoding:%@",[headerData objectForKey:@"Accept-Encoding"]);
    
    //下面是两者获取返回数据并输出数u的方法,前一种比肩简单,直接是string返回;而后一种进行编码后输出
    NSString *requestData=[request responseString];
    NSLog(@"%@",requestData);
    [txt setText:requestData];
    
    NSData *udata=[request responseData];
    NSStringEncoding encodeUdata=CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingUTF8);
    NSString *getUserData=[[NSString alloc] initWithData:udata encoding:encodeUdata];
    NSLog(@"%@",getUserData);
    
}
@end

使用ASIFormDataRequest完成用户的登录操作的更多相关文章

  1. 在Linux下记录所有用户的登录和操作日志

    一般我们可以用history命令来查看用户的操作记录,但是这个命令不能记录是哪个用户登录操作的,也不能记录详细的操作时间,且不完整:所以误操作而造成重要的数据丢失,就很难查到是谁操作的. 在这里我们通 ...

  2. Linux下记录所有用户的登录和操作日志

    Linux下记录所有用户的登录和操作日志   一般我们可以用history命令来查看用户的操作记录,但是这个命令不能记录是哪个用户登录操作的,也不能记录详细的操作时间,且不完整:所以误操作而造成重要的 ...

  3. ubuntu下记录所有用户的登录和操作日志

    一般我们可以用history命令来查看当前用户的操作记录,但是这个命令不能记录是所有用户登录操作的,也不能记录详细的操作时间,且不完整:所以误操作而造成重要的数据丢失,就很难查到是谁操作导致的. 在这 ...

  4. 保存mysql用户的登录信息到~.my.cnf文件;用于方便登录操作。

    原理说明: 在用户调用mysql 这个客户端程序去登录目标服务器时,mysql客户端程序会从本地读取配置文件信息,它要去读的配置文件包括 /etc/my.cnf /etc/mysql/my.cnf ~ ...

  5. Oracle取消用户连续登录失败次数限制

    当用户连续登录失败次数过多时,Oracle会锁定该用户,“FAILED_LOGIN_ATTEMPTS”用于设置最大次数,超过该值则锁定该帐号. 要取消用户连续登录失败次数的限制可以按照以下方法操作: ...

  6. ASP.NET连接数据库时,提示“用户 'sa' 登录失败原因: 未与信任 SQL Server 连接相关联

    用ASP.NET连接数据库时,提示"用户 'sa' 登录失败.原因: 未与信任 SQL Server 连接相关联.".解决方法:首先检查是不是web.config文件内的用户名密码 ...

  7. sql server 用户'sa'登录失败(错误18456)(转载)

    转载地址:http://thenear.blog.51cto.com/4686262/865544 用户'sa'登录失败(错误18456)解决方案图解 当我们在使用sql server 的时候可能会遇 ...

  8. Client默认用户及登录密码(转)

    Client默认用户及登录密码 SAP系统(如ERP.CRM等)安装完成,初始化状态下有若干个客户端(Client).如果是生产系统,一般只有000.001.066等三个Client:如果是IDES系 ...

  9. linux下开启SSH,并且允许root用户远程登录,允许无密码登录

    参考:http://blog.csdn.net/jia0511/article/details/8237698 1. 允许root用户远程登录 修改ssh服务配置文件 sudo vi /etc/ssh ...

随机推荐

  1. merge intervals(合并间隔)

    Given a collection of intervals, merge all overlapping intervals. For example,Given [1,3],[2,6],[8,1 ...

  2. 02_Linux学习_命令

    帮助命令:        xxx --help        man xxx 列出当前目录下的目录和文件:        ls        ls -l        ls --help        ...

  3. 用xml还是json

    1.定义介绍 (1).XML定义 扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允 ...

  4. golang升级

    系统安装软件一般在/usr/share,可执行的文件在/usr/bin,配置文件可能安装到了/etc下等. 文档一般在 /usr/share 可执行文件 /usr/bin 配置文件 /etc lib文 ...

  5. html5 file upload and form data by ajax

    html5 file upload and form data by ajax 最近接了一个小活,在短时间内实现一个活动报名页面,其中遇到了文件上传. 我预期的效果是一次ajax post请求,然后在 ...

  6. 华为专家谈CMDB建设

    CMDB成功的关键因素 对于CMDB项目的失败,普遍的解释是:没有数据的消费场景.工具和技术不行.流程管控不足. 从我自身的实践来看,我对此是有不同看法的.上述原因的确会影响人们使用CMDB,严重时甚 ...

  7. 蚂蚁 RPC 框架 SOFA-RPC 初体验

    前言 最近蚂蚁金服开源了分布式框架 SOFA,楼主写了一个 demo,体验了一下 SOFA 的功能,SOFA 完全兼容 SpringBoot(当然 Dubbo 也是可以兼容的). 项目地址:Alipa ...

  8. AspnetCore 缓存篇

    AspnetCore 缓存篇 一.缓存的作用 怎样理解缓存: 其实所有的程序,架构,优化,线程...等技术手段,最终的目的都是如何使产品快速的响应用户的操作,提高用户的体验性,目标都是为了系统的使用者 ...

  9. 常用域名记录解释:A记录、MX记录、CNAME记录、TXT记录、AAAA记录、NS记录

    A记录 A记录是用来创建到IP地址的记录. A记录设置技巧 1.如果想创建不带www的记录,即ezloo.com,在主机记录中填写@或者留空,不同的注册商可能不一样. 2.创建多个域名到同一个IP,比 ...

  10. 一个完整的html 每个标签的含义

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...