1、网络编程:HTTP协议、XML数据协议、JSON数据协议:
传输数据有四种方式:Get方式、Post方式、同步请求方式、异步请求方式。
说明:同步和异步请求方式在创建链接对象和创建请求对象时,用Get方式或Post方式中的任意一种即可;那么,同步/异步请求方式和Get/Post方式不同的地方是什么呢?区别在于进行连接处理这一步上,Get/Post方式它们均使用相同代理NSURLConnectionDataDelegate的方法传输数据,而同步/异步请求方式则不需要使用代理。
2、实现步骤:
•第一步:确定地址——URL •NSURL(地址)
•第二步:建立请求 •NSURLRequest(请求,GET请求使用)/•NSMutableURLRequest(可变请求,POST请求使用)
•第三步:开始连接 •NSURLConnection(连接)
等待网络处理中……
•第四步:连接完成,处理结果
3、<NSURLConnectionDataDelegate>方法,Get和Post方式发送数据时,连接过程中使用代理,之所以使用代理,是因为要处理请求返回的结果!
// 服务器开始返回数据
-(void)connection:didReceiveResponse:
// 收到服务器返回的数据,本方法会被调用多次
- (void)connection:didReceiveData:
// 数据接收完毕,做数据的最后处理
-(void)connectionDidFinishLoading:
// 网络连接错误
- (void)connection:didFailWithError:
// 发送数据给服务器,POST 请求使用此方法
- (void)connection:didSendBodyData:totalBytesWritten: totalBytesExpectedToWrite:
unsigned long enconding = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000)
4、GET请求步骤——1. 地址 2.请求 3.连接 4.启动
(1)定义URL:
•NSString *urlStr = @"http://127.0.0.1/login.php?username=admin&password=123";
•NSURL *url = [NSURL URLWithString:[urlStr
stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
(2)定义Reauest:
•NSURLRequest *request = [NSURLRequest requestWithURL:url];
(3)定义Connection:
•NSURLConnection *conn = [[NSURLConnection alloc]initWithRequest:request delegate:self];
(4)启动Connection:
•[conn start];
5、POST请求步骤——1. 地址 2.请求 3.连接 4.启动
(1)定义URL
•NSString *urlStr = @"http://xxx.com/login.php”;
(2)定义Request:
•NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
•// 等待服务器响应的最长时间
•[request setTimeoutInterval:5.0];
•// 设置请求方法,大小写无关
•[request setHTTPMethod:@"post"];
•NSString *bodyString = [NSString stringWithFormat:@"username=%@&password=%@",_userNameText.text,_passwordText.text];
•// 生成请求体数据并编码
•NSData *body = [bodyString dataUsingEncoding:NSUTF8StringEncoding];
•// 设置HTTP请求数据体
•[request setHTTPBody:body];
(3)定义Connection:
•NSURLConnection *conn = [[NSURLConnection alloc]initWithRequest:request delegate:self];
(4)启动Connection:
•[conn start];
6、同步请求和异步请求(前两步和Get或Post相同): 1. 地址 2.请求 3.使用同步/异步请求
•NSURLConnection提供了两个静态方法可以直接同步或异步调用NSURLRequest,而无需通过NSURLConnectionDataDelegate获取数据
•同步请求:
sendSynchronousRequest:request returningResponse:&response error:&error
•异步请求:
sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error)
•服务器传输回来的数据,解析它要用的编码类型:
unsigned long encoding = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);