网络请求 同步get 同步post 异步get 异步post

Get请求 : 从服务端直接获取数据
1.Get请求一般只是从服务器获取数据, 请求时一般会提交服务器一些请求参数, 附加载URL上的, 参数之间以&分割
2.URL中英文和数字进行原样识别, 而中文或者一些其他字符需要计算机再进行编码
3.Get请求提交的数据一般放在http协议的头header中

Post请求 : 上传数据改变服务端的内容
1.Post请求多用于给服务器提交数据
2.Post请求提交的数据一般放在http的主题数据包body中

Get与Post之间的区别 :
数据量的限制不同 :
(1)由于get请求提交的数据是依附于URL中, http协议没规定URL长度及请求参数的个数, 所以理论上不存在大小限制, 但是不同浏览器对支持的URL最大先对有所限制
(2)http协议也没有规定Post请求的大小, 所以理论上post的大小也没有限制。但是往往服务端考虑到处理数据的能力, 会对它做一些限制。 但是一般Post请求数据的量会大于Get请求
安全性不同 :
(1)由于Get请求的数据附加语URL上, 所以提交的数据是可以看见的, 数据包被拦截后也是明文的, 再者浏览器的浏览的历史记录也会被人看见, 加入提交的是用户名和面那就很不安全
(2)Post提交的数据是在body体中, 相对安全性更高一些

请求一般分为三步:
1.创建URL
2.创建请求Request
3.建立连接 完成数据请求

一、同步GET请求(Synchronous)

// 把网址放在字符串中
NSString *strURL = @"http://api.map.baidu.com/place/v2/search?query=银行&region=大连&output=json&ak=6E823f587c95f0148c19993539b99295";
    //  因为网址里面不允许有汉字, 只能有26个字母的大小写, 数字, 和一些特定的符号, 比如&, %, /等, 所以有中文的网址要先把中文变成相对应的数字编码
    //  汉字变编码的方法  stringByAddingPercentEscapesUsingEncoding
    NSString *strURLEncode = [strURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    //  1. 创建一个URL
    NSURL *url = [NSURL URLWithString:strURLEncode];
    //  2. 发送一个请求
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    //  3. 建立一个连接
    // 参数1: 把创建好的请求发送
    // 参数2: 返回的响应信息
    // 参数3: 错误信息
    NSURLResponse *response = nil;
    NSError *error = nil;
    NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
    //  把data进行json解析
    NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
    NSLog(@"%@", dic);
    NSLog(@"%@", response);
    //如果出现的错误是 :  data parameter is nil   是因为进行data进行json解析不能是空的, 首先检查网络, 或者是把程序和网络断开, 重新连接

同步POST

//  post请求需要在请求的过程中 添加一个body, 添加之后才可以获取数据
    NSString *urlStr = @"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx";
    //  1. 创建一个URL
    NSURL *url = [NSURL URLWithString:urlStr];
    //  2. 创建一个请求
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    // 先指定请求方式, 默认是get请求
    [request setHTTPMethod:@"POST"];
    //  body的字符串
    NSString *bodyStr = @"date=20131129&startRecord=1&len=30&udid=1234567890&terminalType=Iphone&cid=213";
    //  body的字符串变成NSData形式
    NSData *bodydata = [bodyStr dataUsingEncoding:NSUTF8StringEncoding];
    //  把bodydata放到request中
    [request setHTTPBody:bodydata];
    //  3. 建立一个连接
    NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
    //  4. 把data进行json解析
    NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
    NSArray *arr = dic[@"news"];
    for (NSDictionary *dic1 in arr) {
        NSLog(@"%@", dic1[@"summary"]);
    }

异步GET(AsyncSocket)

#pragma mark - 异步Get请求
#pragma mark - NSURLConnectionDataDelegate
- (IBAction)asynGET:(id)sender {
    NSString *strURL = @"http://img4.duitang.com/uploads/item/201207/28/20120728105310_jvAjW.thumb.600_0.jpeg";
    //  1. 创建URL
    NSURL *url = [NSURL URLWithString:strURL];
    //  2. 创建请求
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    //  3. 建立连接
    [NSURLConnection connectionWithRequest:request delegate:self];
    //  这个方法可以在2.0到9.0之间的版本使用, 9.0以上的版本不能使用这个方法, 注意!!!!
}
#pragma mark - 会返回响应信息
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
    // 这个方法会返回响应信息
    //  初始化装数据的容器
    self.data = [NSMutableData data];
}
#pragma mark - 接受到服务器返回的数据时调用(如果数据比较多, 这个方法可能会被调用多次)
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
    NSLog(@"接受服务器返回的数据");
    //  这个方法会接受返回的数据
    // 拼接数据
    [self.data appendData:data];
}
#pragma mark - 网络连接时出错时调用
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
    NSLog(@"网络连接出错");
}
#pragma mark - 服务器的数据已经接受完毕时调用
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
    NSLog(@"服务器的数据已经接受完毕");
    //  把图片显示在上面
    self.imageView.image = [UIImage imageWithData:self.data];
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章