GET请求模拟登录
- (IBAction)login:(id)sender
{
// 从文本输入框获取用户名和密码 zhangsan zhang 张三
NSString *name = self.nameTextField.text;
NSString *password = self.passwordextField.text;
// 拼接请求地址
NSString *URLStr = [NSString stringWithFormat:@"http://localhost/php/login/login.php?username=%@&password=%@",name,password];
// 转义查询字符串(参数)里面的中文 / 空格 / 特殊字符...
// AFN自动帮助转义
URLStr = [URLStr stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
// 1.URL
NSURL *URL = [NSURL URLWithString:URLStr];
// 2.获取单例session,发起任务,启动任务 (默认就是GET请求)
[[[NSURLSession sharedSession] dataTaskWithURL:URL completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
// 3.处理响应
if (error == nil && data != nil) {
// 4.反序列化
NSDictionary *result = [NSJSONSerialization JSONObjectWithData:data options:0 error:NULL];
// 5.判断是否登录成功
if ([result[@"userId"] intValue] == 1) {
NSLog(@"登录成功");
} else {
NSLog(@"登录失败");
}
} else {
NSLog(@"%@",error);
}
}] resume];
}
以上需要注意的是
转义查询字符串(参数)里面的中文 / 空格 / 特殊字符...
URLStr = [URLStr stringByAddingPercentEncodingWithAllowedCharacters:
[NSCharacterSet URLQueryAllowedCharacterSet]];
POST请求模拟登录
- (IBAction)login:(id)sender
{
// 1.URL (POST请求的URL没有参数,参数封装在请求体)
NSURL *URL = [NSURL URLWithString:@"http://localhost/php/login/login.php"];
// 2.创建请求可变对象
NSMutableURLRequest *requestM = [NSMutableURLRequest requestWithURL:URL];
// 2.1 设置请求方法为POST
requestM.HTTPMethod = @"POST";
// 2.2 设置请求体 : 二进制的数据
requestM.HTTPBody = [self getHTTPBody];
// 2.获取单例session,发起任务,启动任务
[[[NSURLSession sharedSession] dataTaskWithRequest:requestM completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
// 3.处理响应
if (error == nil && data != nil) {
// 4.反序列化
NSDictionary *result = [NSJSONSerialization JSONObjectWithData:data options:0 error:NULL];
// 5.判断是否登录成功
if ([result[@"userId"] intValue] == 1) {
NSLog(@"登录成功");
// 实际开法中,登录成功之后,需要把服务器返回的用户的数据保存在本地
} else {
NSLog(@"登录失败");
}
} else {
NSLog(@"%@",error);
}
}] resume];
}
// 获取请求体二进制的主方法
- (NSData *)getHTTPBody
{
// 浏览器检测到的请求体 : username=%E5%BC%A0%E4%B8%89&password=zhang
// 拼接请求体字符串 : POST请求的请求里面的中文不需要转义
NSString *body = [NSString stringWithFormat:@"username=%@&password=%@",self.nameTextField.text,self.passwordTextField.text];
// 把请求体字符串转成二进制形式的请求体;dataUsingEncoding : 直接把字符串转成二进制
NSData *HTTPBody = [body dataUsingEncoding:NSUTF8StringEncoding];
return HTTPBody;
}