首先,要了解get和post的概念,get和post都是访问服务器的方法,但使用还是有区别的。从字面意思上看,get是“取”的意思,post有“推送”之意,我们可以做个简单的PHP页面,放在根站点下(关于PHP+MySQL配置,以及Apache的配置本人就不在多讲了,大家问度娘即可,熟悉java的也可以用java+Apache tomcat的方法)下面是PHP源代码,大家可以拷贝,存储为.php文件即可(做get测试的时候,将代码中的POST改为GET即可)。
<?php
//定义常量
define(DB_HOST, ‘127.0.0.1‘);
define(DB_USER, ‘root‘);
define(DB_PASS, ‘123456‘);
define(DB_DATABASENAME, ‘itcast‘);
define(DB_TABLENAME, ‘userInfo‘);
//mysql_connect
$conn = mysql_connect(DB_HOST, DB_USER, DB_PASS) or die("链接数据库失败" . mysql_error());
mysql_select_db(DB_DATABASENAME, $conn);
$userName = $_POST[‘userName‘];
$userPwd = $_POST[‘userPwd‘];
//根据提交的用户名和密码查询
$sql = sprintf("select * from %s where userName=‘%s‘ and userPwd=‘%s‘", DB_TABLENAME, $userName, $userPwd);
$result = mysql_query($sql, $conn);
//表格
$count = mysql_num_rows($result);
echo "用户名:".$_POST[‘userName‘].",密码:".$_POST[‘userPwd‘]."的记录有".$count."条<br/>";
mysql_free_result($result);
mysql_close($conn);
?>
假设,我们做了个PHP网页,命名为GetUserInfo.php,并放在跟站点之下,假设我要通过此页面访问我的数据库itcast中的table:userInfo,数据库截图如下:
1、get:get方法是用于直接从服务器上取资源,我们在连接总,url形式为:http://localhost/GetUserInfo.php?userName=zhang&userPwd=1
2、post:通过数据体发送请求。url形式为:http://localhost/GetUserInfo.php.
两者的区别在于,get是直接获取数据,post需要包装数据体,塞给服务器才可以获取到数据,具体差异,请参见源代码:
#import "QZLViewController.h"
@interface QZLViewController ()
@property (weak, nonatomic) IBOutlet UITextField *userName;
@property (weak, nonatomic) IBOutlet UITextField *userPwd;
@property (weak, nonatomic) IBOutlet UILabel *stateLabel;
@end
@implementation QZLViewController
- (void)viewDidLoad
{
[super viewDidLoad];
//[self testGet];
}
- (IBAction)testGet {
//1、创建一个url
NSString *urlStr = [NSString stringWithFormat:@"http://localhost/GetUserInfo.php?userName=%@&userPwd=%@",self.userName.text,self.userPwd.text];
NSURL *url = [NSURL URLWithString:urlStr];
//2、定义一个请求
NSURLRequest *request = [NSURLRequest requestWithURL:url];
//3、发送异步网络请求
[NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
//如果服务器连接正常,执行一下操作
if (connectionError == nil)
{
//输出服务器返回的数据
NSString *tempStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"%@",tempStr);
//设置登录状态(更新UI在主线程中进行)
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
self.stateLabel.text = @"登陆完成";
}];
}
}];
}
- (IBAction)testPost {
//1、定义url串
NSString *urlStr = @"http://localhost/GetUserInfo.php";
NSURL *url = [NSURL URLWithString:urlStr];
//2、定义可变请求
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
//3、设置请求方法
request.HTTPMethod = @"POST";
//4、设置数据体字符串
NSString *requestStr = [NSString stringWithFormat:@"userName=%@&userPwd=%@",self.userName.text,self.userPwd.text];
//5、将数据体字符串转化为二进制请求数据流
NSData *requestData = [requestStr dataUsingEncoding:NSUTF8StringEncoding];
request.HTTPBody = requestData;
//6、发送网络请求
[NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
if (connectionError == nil)
{
NSString *tempStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"%@",tempStr);
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
self.stateLabel.text = @"登陆完成";
}];
}
}];
}
@end
执行post测试结果如下(要想搞清楚,请细读源代码,区分下两者的URL有何不同)