#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
/**
*
http是一个超文本传输协议(Hyper Text Tansfer Protocol)所有www文件都必须遵守这个协议标准
http 是万维网浏览传输数据的一个协议;访问的是远程网络资源,格式是http://服务器地址 资源地址 http//www.baidu.com/user/info
IP协议对应网络层;TCP对应传输层;HTTP对应应用层
http协议的作用:
01.规定客户端和服务器之间的数据传输格式
02.让客户端和服务器能有效的进行数据沟通
使用HTTP协议的好处:
01.简单快速,因为HTTP协议简单,所以http服务器的程序规模小,因而通信速度快
02.灵活,HTTP允许传输任意类型的数据
03.HTTP是非持续连接,限制每次连接只处理一个请求,服务器对客服端的请求做出相应后,马上断开连接,这种方式节省传输时间
HTTP的通信过程:
01.请求 客服端向服务器索求数据
02.响应 服务器返回客服端相应的数据
***********************
HTTP的请求方式:get post
get 会把请求的内容放到请求的连接上(拼接到链接地址里面)(数据请求的时候 默认是get)
如:www.baidu.com/user/login?username=流水,psw=123
get的特征:
01.浏览器和服务器对URL有长度限制,因此在URL后面附带的参数是有限制的,通常不能超过1KB
02.会把请求的数据暴露在接口里面
post 参数全部放在请求体中,这样就保证数据安全,没有具体的长度限制(唯一的限制就是服务器的承受能力)
GET和POST使用情况:
01.如果需要传输大量数据,比如文件上传,只能用POST请求
02.GET的安全性比POST差 如果包含机密、敏感信息建议用POST请求
03.如果是增删改数据,建议用POST
04.如果仅仅是索取数据(数据查询)建议用GET
URL:Uniform Resource Locator(统一资源定位符)通过1个URL,能找到互联网上唯一的1个资源地址
psw:密码 md5(密码)加密
**********************
网络请求: 同步请求 异步请求
01. 同步请求 等所有操作完全执行完毕,才会继续执行;特征:会遇到假死的情况,只要请求的操作没有执行完毕就不会再去响应任何事件(在同一线程)
02. 异步请求 在程序运行的时候,会利用空闲的时间去执行里面的操作 不会影响到同一线程里面的其他操作
*/
- (void)viewDidLoad {
[super viewDidLoad];
// [self loadData1];
// [self loadData2];
// [self loadData3];
// [self loadData4];
// [self loadData5];
[self loadData6];
}
//通过URl 获得URL里面的内容(字符串)
- (void)loadData1
{
//把字符串转化成 NSURL
NSURL *url = [NSURL URLWithString:@"http://192.168.1.126:8080/cms4/login/doLogin.action"];
NSString *content = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
NSLog(@"%@",content);
}
//通过URl 获得URL里面的data
- (void)loadData2
{
NSURL *url = [NSURL URLWithString:@"http://preview.quanjing.com/is_rm001/is0997q92.jpg"];
NSData *data = [NSData dataWithContentsOfURL:url];
UIImageView *imageView= [[UIImageView alloc]initWithFrame:self.view.frame];
imageView.contentMode = UIViewContentModeScaleAspectFill;
imageView.image = [UIImage imageWithData :data];
[self.view addSubview:imageView];
}
//同步请求
- (void)loadData3
{
NSURL *url = [NSURL URLWithString:@"http://preview.quanjing.com/is_rm001/is0997q92.jpg"];
//实例化一个请求对象 里面携带请求地址
NSURLRequest *request = [NSURLRequest requestWithURL:url];
//data 是服务器返回的数据 NSURLConnection是发送请求的类
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
UIImageView *imageView= [[UIImageView alloc]initWithFrame:self.view.frame];
imageView.contentMode = UIViewContentModeScaleAspectFill;
imageView.image = [UIImage imageWithData :data];
[self.view addSubview:imageView];
}
//异步请求
- (void)loadData4
{
UIImageView *imageView= [[UIImageView alloc]initWithFrame:self.view.frame];
imageView.contentMode = UIViewContentModeScaleAspectFill;
[self.view addSubview:imageView];
NSURL *url = [NSURL URLWithString:@"http://preview.quanjing.com/is_rm001/is0997q92.jpg"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
//需要通过链接 异步发送 请求
//线程
NSOperationQueue *queue = [[NSOperationQueue alloc]init];
//发送一个异步请求 在这个线程里面去执行
[NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
//response 服务器回应的内容(回应状态的code以及error)data 回应给客户端需要的数据
NSLog(@"%@",response);
imageView.image = [UIImage imageWithData :data];
}];
}
//get 把传输的数据放在链接地址里面
- (void)loadData5
{
NSString *interfaceString = @"http://apis.baidu.com/showapi_open_bus/mobile/find";
NSString *requestContentString = @"num=18786084133";
NSString *uselString = [NSString stringWithFormat:@"%@?%@",interfaceString,requestContentString];
//把链接地址的字符窜 转化成NSUTF8StringEncoding
NSURL *url = [NSURL URLWithString:[uselString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
//可变请求 可以添加请求方式以及请求的 请求头或者更多
//(NSTimeInterval)请求需要的时间 超过时间 就不在请求 cachePolicy缓存方式
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];
//指定http的请求方式
request.HTTPMethod = @"GET";
NSString *apiKey = @"e7f5ac9e7c42a6c8cb125ee1d7e8779e";
//把apiKey 发送给服务器指定的请求头 位置;forHTTPHeaderField需要的KEY 是服务器指定的key
[request addValue:apiKey forHTTPHeaderField:@"apikey"];
[NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc]init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
NSLog(@"%@",response);
// 解析json文件
// 把data转换成json文件
NSDictionary *info = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
NSLog(@"%@ %@ %@",info[@"showapi_res_body"][@"city"],info[@"showapi_res_body"][@"name"],info[@"showapi_res_body"][@"num"]);
}];
}
//post请求
- (void)loadData6
{
NSURL *url = [NSURL URLWithString:@"http://www.weihuok.com/customer2/GetService"];
//请求的参数 PlatformType设备型号
NSDictionary *dic = @{@"PlatformType":@"3"};
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];
//设置HTTP的请求方式
request.HTTPMethod = @"POST";
//设置请求的参数
//dataUsingEncoding把字符串转换成data
//HTTPBody要的是data数据
request.HTTPBody = [[NSString stringWithFormat:@"%@",dic]dataUsingEncoding:NSUTF8StringEncoding];
//发送请求
[NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc]init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
NSDictionary *info = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
NSLog(@"%@",info);
}];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end