牛骨文教育服务平台(让学习变的简单)

首先我们来创建一个URL

NSURL *url = [NSURL URLWithString:@"http://m.baidu.com"];

m:mobile专门给手机提供访问的连接

创建请求对象,根据url向服务器索要数据

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:15];
  • 这个方法里面,我们要做的事情:
  • 通过NSMutableURLRequest告诉服务器一些额外的信息
  • timeoutInterval:请求超时时长,在指定的时间内,如果没有得到服务器的响应,则认为请求是失败的

  • 默认是60s 但是建议在15~30s之间

  • cachePolicy 缓存策略

  • NSURLRequestUseProtocolCachePolicy = 0, 默认的策略

  • NSURLRequestReloadIgnoringLocalCacheData = 1,每次从服务器加载,忽略本地缓存。

  • 一般使用在实时性要求很高的应用,股票/12306/

  • 下面两个一般使用在开发离线版应用。

  • 离线版应用一般需要两个数据库,一个是本地数据库Sqlite3,一个服务器数据库。

  • NSURLRequestReturnCacheDataElseLoad = 2, 有缓存,就返回缓存数据,没有就从服务器加载。
  • NSURLRequestReturnCacheDataDontLoad = 3, 有缓存,就返回缓存数据,没有就不加载

  • 告诉服务器,我是iPhone 并且支持Apple的网页套件

[request setValue:@"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/601.2.7 (KHTML, like Gecko) Version/9.0.1 Safari/601.2.7" forHTTPHeaderField:@"User-Agent"];
  • 将请求对象发送给服务器–(网络访问都是耗时操作,使用异步)
  • sendAsynchronousRequest:本身是异步,NSURLConnection内部会开启一条线程进行网络访问
  • queue:决定了completionHandler回调所在的线程
  • 如何选择队列
  • 如果获得服务器响应的时候,要做耗时操作,则选择自己创建队列,比如下载一个zip包,解压缩
  • 如果获得响应后直接更新UI,则选择主队列。
    completionHandler:服务器响应客户端的回调。

response

本质是NSHTTPURLResponse

  • statusCode:状态码,可以根据这个值判断是否请求出错。
  • allHeaderFields:获得响应体
  • URL:一般使用在重定向,如果不需要重定向,响应的url和请求的url是一样的。
  • MIMEType:服务器告诉客户端返回的数据类型,并决定客户端使用什么软件查看内容
  • textEncodingName : 服务器告诉客户端返回内容的编码格式

下面两个属性一般使用在开发下载功能

  • expectedContentLength:服务器返回数据的长度,客户端可以通过该属性获得文件大

  • suggestedFilename:服务器建议客户端保存文件使用的名字
    如下:

[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {

        if(connectionError != nil || data.length == 0) {
            NSLog(@"你的网络不给力哦");
            return;
        }

        NSString *html = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

加载html

[self.webView loadData:data MIMEType:response.MIMEType textEncodingName:response.textEncodingName baseURL:url];