网络:网络基础知识

#import "ViewController.h"
#import <WebKit/WebKit.h>
@interface ViewController ()<UIWebViewDelegate>
@property (weak, nonatomic) IBOutlet UIWebView *webView;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

}


- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    [self request];
}

- (void)request {
    // iOS 9 (Xcode 7) 之后,要请求http的地址,要配置info.plist
    // NSURL 网络地址
    /*
     URL的格式
     1. 协议 http
     2. 主机名(域名,ip) ios.itcast.cn
     3. 资源的路径 ios/images/content_25.jpg

     通过 http 去 ios.itcast.cn 这台电脑找到路径为 ios/images/content_25.jpg 的图片
     */
    // 大公司都会为网站专门做一个移动端的,通常都有一个移动端的域名
    // mobile
    NSURL *url = [NSURL URLWithString:@"http://ios.itcast.cn/ios/images/content_25.jpg"];

    // 请求
    // 创建请求
    /*
     1. 扫描二维码 (网址) 如果你是安卓用户,就去跳去官网下载
        如果是iOS用户,跳转到App store
     我们可以设置一些请求头,让服务器知道我们是什么用户
     */
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    // 用户代理 ,设置了用户代理之后,服务器就知道我们是什么用户
//    [request setValue:@"iPhone" forHTTPHeaderField:@"User-Agent"];
    // WebKit 是 iOS8 之后的,如果想适合iOS7 就不能使用
    [request setValue:@"iPhone AppleWebKit" forHTTPHeaderField:@"User-Agent"];

    /*
     status code: 200 表示成功
     Connection = close; 断开连接
     "Content-Length" = 601; 内容长度
     "Content-Type" = "text/html;charset=utf-8"; 内容类型 我们通常使用的编码都是UTF8
     gb2312,gbk 中文编码 6-7000
     中文已经有85000,现在估计超过十万
     */
    // 发送请求 发送异步请求
    /*
     1. 请求
     2. completionHandler 回调的队列
     3. completionHandler 回调
     */
    /**
     response 其实是 NSHTTPURLResponse
     statusCode 状态码
     */
    /*
     重定向: 是指浏览器浏览一个地址的时候,又被跳转到另一个地址(登录几秒之后作跳转操作)

     */
    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
        NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
        // 处理状态码,提示用户 (要用好的提示用户),淘宝体
//        NSLog(@"状态码是%zd",httpResponse.statusCode);
        // 在开发的时候可以暂时不处理,但是上线一定要处理
        // 网络超时(告诉用户网络状态不好)
        if (httpResponse.statusCode == 404) {
            NSLog(@"亲,页面找不到哦!");
        }
        // NSData 跟 NSString有什么关系
        // 传输过程都是二进制数据,但是NSData 输出的是16进制数据
        // 显示成16进制,看起来是比较短
        // NSData 其实跟NSString是一样的
        // NSData 用于I/O
        // NSSrting 用来显示字符串(表现层)
        /*
         4G 刚出来, 100M b(bit)ps 
         问:600 兆需要下载多久
         客户:6秒
         至少 48 秒

         1 bytes = 8 bit
         */
        [data writeToFile:@"Users/gzxzmac/Desktop/123" atomically:YES];
        // response 响应
        // data 二进制数据
        // connectionError 错误信息
        NSLog(@"response = %@",response);

        /*
         statusCode
         200 成功
         404 路径不存在(资源不存在) 403 
         504

         MIMEType 相当于 Content-Type 内容类型
         expectedContentLength 内容长度
         suggestedFilename 建议保存的文件名(下载)
         */
        NSLog(@"状态码 = %zd",httpResponse.statusCode);
        NSLog(@"响应头 = %@",httpResponse.allHeaderFields);
        NSLog(@"内容类型 = %@",httpResponse.MIMEType);
        NSLog(@"内容长度 = %lld",httpResponse.expectedContentLength);
        NSLog(@"编码 = %@",httpResponse.textEncodingName);

        NSString *html = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
//        NSLog(@"data =%@",data);
//        NSLog(@"%@",[NSThread currentThread]);
        // baseURL 是资源的相对路径(主机名) ios/images/content_25.jpg
        [self.webView loadHTMLString:html baseURL:url];

    }];
}

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
    NSLog(@"%@",request.URL);
    return YES;
}

@end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值