#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