一、HTTP
a) HTTP(Hyper Text TransferProtocol)超文本传输协议,是一种基于请求响应的无状态的应用层协议。其通过tcp协议进行传输。
b) HTTP1.0 一次连接一次传输;HTTP1.1一次连接多次传输。
二、POST &GET
a) GET 请求变量在url中,安全性能差,受url链接长度的限制传输数据少;
b) POST 请求数据在包体中,相对安全,传输数据大。
三、请求方法
a) 同步get 主线程
b) 异步get
c) 同步post 主线程
d) 异步post
四、示例代码
//
// ViewController.m
// Demo18
//
// Created by LiLeo on 16/6/24.
// Copyright © 2016年 LeoLi. All rights reserved.
//
#import "ViewController.h"
#import "Reachability.h"
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UILabel *status;
@property (strong, nonatomic) Reachability * reachability;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
_reachability = [Reachability reachabilityWithHostName:@"www.apple.com"];
//[_reachability startNotifier];
}
- (void)viewWillAppear:(BOOL)animated {
[_reachability startNotifier];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateNetworkStatus) name:kReachabilityChangedNotification object:nil];
}
- (void)viewDidDisappear:(BOOL)animated {
[[NSNotificationCenter defaultCenter] removeObserver:self];
[_reachability stopNotifier];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
<span style="color:#ff0000;">/**
* 同步get请求
* 注意在Info.plist里添加
* <key>NSAppTransportSecurity</key>
* <dict>
* <key>NSAllowsArbitraryLoads</key>
* <true/>
* </dict>
* App Transport Security Settings
*/</span>
- (IBAction)syncGet:(id)sender {
//准备get请求连接
NSString * string = [NSString stringWithFormat:@"%@", @"http://www.baidu.com"];
//防止中文错误进行链接字符编码转换
NSString * urlString = [string stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
//获取url
NSURL * url = [NSURL URLWithString:urlString];
//得到请求
NSURLRequest * request = [NSURLRequest requestWithURL:url];
//定义错误接收
NSError * error;
//发送同步get请求
NSData * data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:&error];
//数据转字符串
NSString * result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
//输出的到的内容
NSLog(@"%@", result);
}
- (IBAction)syncPost:(id)sender {
//准备get请求连接
NSString * string = [NSString stringWithFormat:@"%@", @"http://www.baidu.com"];
//防止中文错误进行链接字符编码转换
NSString * urlString = [string stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
//获取url
NSURL * url = [NSURL URLWithString:urlString];
//得到请求
NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:url];
//准备http包体
NSString * bodyString = @"page=1&line=10";
//转换成数据
NSData * bodyData = [bodyString dataUsingEncoding:NSUTF8StringEncoding];
//设置包体和请求方法
[request setHTTPBody:bodyData];
[request setHTTPMethod:@"POST"];
//定义错误接收
NSError * error;
//发送同步post请求
NSData * data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:&error];
//数据转字符串
NSString * result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
//输出的到的内容
NSLog(@"%@", result);
}
- (IBAction)asyncGet:(id)sender {
//准备get请求连接
NSString * string = [NSString stringWithFormat:@"%@", @"http://www.baidu.com"];
//防止中文错误进行链接字符编码转换
NSString * urlString = [string stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
//获取url
NSURL * url = [NSURL URLWithString:urlString];
//得到请求
NSURLRequest * request = [NSURLRequest requestWithURL:url];
NSOperationQueue * queue = [[NSOperationQueue alloc] init];
//发送同步get请求
[NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
[NSThread sleepForTimeInterval:5];
NSString * result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
//输出的到的内容
NSLog(@"%@", result);
}];
}
- (IBAction)asyncPost:(id)sender {
//同上
//使用新的api NSURLSession
//NSURLSession 和 NSURLConnection的最大区别在于后台运行
NSString * urlString = [NSString stringWithFormat:@"http://www.baidu.com"];
NSString * safeUrlString = [urlString stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet characterSetWithCharactersInString:@"`#%^{}\"[]|\\<> "].invertedSet];
NSURL * url = [NSURL URLWithString:safeUrlString];
NSURLRequest * request = [NSURLRequest requestWithURL:url];
NSURLSession * session = [NSURLSession sharedSession];
/*NSURLSessionDataTask * task = */[session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
[NSThread sleepForTimeInterval:5];
NSString * result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
//输出的到的内容
NSLog(@"%@", result);
}];
}
- (void)updateNetworkStatus {
NetworkStatus status = [_reachability currentReachabilityStatus];
switch (status) {
case NotReachable:
_status.text = @"无网络";
break;
case ReachableViaWiFi:
_status.text = @"WiFi网络";
break;
case ReachableViaWWAN:
_status.text = @"WWAN网络";
break;
default:
break;
}
}
/**
* 判断网络类型:无网 wifi 3g
* NetworkStatus
* typedef enum : NSInteger {
* NotReachable = 0,
* ReachableViaWiFi,
* ReachableViaWWAN
* } NetworkStatus;
*/
- (BOOL)isNetworkAvaliable {
Reachability * r = [Reachability reachabilityWithHostName:@"www.baidu.com"];
NetworkStatus status = [r currentReachabilityStatus];
if(status != NotReachable) {
return YES;
}
return NO;
}
/**
* 判断wifi通否
*/
- (BOOL)isWiFiAvaliable {
Reachability * r = [Reachability reachabilityForLocalWiFi];
NetworkStatus status = [r currentReachabilityStatus];
if(status != NotReachable) {
return YES;
}
return NO;
}
/**
* 判断3g通否
*/
- (BOOL)isWWANAvaliable {
Reachability * r = [Reachability reachabilityForInternetConnection];
NetworkStatus status = [r currentReachabilityStatus];
if(status != NotReachable) {
return YES;
}
return NO;
}
@end
五、参考文档
a) http://www.cocoachina.com/ios/20140919/9691.html
b) http://witcheryne.iteye.com/blog/1879827
c) http://www.tuicool.com/articles/VBv2qe
d) http://www.aichengxu.com/view/82953
e) http://www.open-open.com/lib/view/open1355055986679.html
Reachability.h和Reachability.m文件下载