HTTP协议

文字部分:

// http协议:

//超文本传输协议 HTTP HyperText Tansfer Protocol)是互联网上应用最为广泛地一种协议 所有的www文件都必须遵循这个准则

//http 是用于 www(万维网)浏览传输数据的一个协议

//IP 协议  对应于网络层   TCP协议对应于传输层  Http协议对应于应用层



//http协议的作用:

//1. 规定客户端和服务端之间的数据传输方式

//2.让客户端和服务器能有效的进行数据沟通



//为什么要选择http

//1. 简单快捷   因为http协议简单 所以http服务器的程序规模小 因而通信速度很快

//2.灵活  http  允许传输任何类型的数据

//3. http是非持续 限制每次连接只处理一个请求  服务器对客户端的请求做出相应后 马上断开连接 这种方式可以节省传输时间


//http通信的过程:

//1. 请求:客户端向服务器索要数据

//2.向应: 服务器向客户端相应数据


//****http的请求方法:getpost


// get 会把请求的内容 拼接到 连接 地址里面 (数据请求的时候 默认是get的方式) 如:www.baidu.com/user/longin?/usersname=xiaohua,psw=123

//get的特征:(经常考得内容)

//1.浏览器和服务器对URL长度有限制 因此URL后面附带的参数是有限制的 通常不能超过1KB

//2.请求的数据暴露在接口里面




//post 参数全部放在请求体中

//这样就保证了 数据的安全

//没有具体的长度限制(唯一的限制就是服务器的承受能力)

//选择CETPOST的建议

//1.如果要传送大量数据 比如文件 只能用post

//2.GET的安全性比post要差点 如果包含机密|敏感信息,建议用post

//3.如果仅仅是索要数据 建议使用get

//4.如果是曾加 、修改、删除数据、建议使用post


//URL:Uniform Resource Locator (统一资源定位符)

//通过1URL 能找到妇联网上的唯一的1个资源(唯一性 可以访问到后台数据库)

//字符串读取网络数据


代码部分:

—————————————ViewController.m——————————————

#import "ViewController.h"


@interface ViewController ()


@end


@implementation ViewController


- (void)viewDidLoad {

    [super viewDidLoad];

    

//    [self loadData1];

      [self loadData2];

//    [self loadData3];

//    [self loadData4];

//    [self loadDada5];

//    [self loadData6];

    

}

#pragma mark post

- (void)loadData6

{

    NSURL *url = [NSURL URLWithString:@"http://www.weihuok.com/customer2/GetService"];

    //    请求参数

    //    PlatformType设备类型 3表示IOS设备

    NSDictionary *dic = @{@" PlatformType":@"3"};

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];

//    设置HTTP的请求方式

    request.HTTPMethod = @"POST";

//    设置请求参数 HTTPBody要的是data类型的数据 dataUsingEncoding转换成字符串类型

    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);

    }];

    

    

    

}



#pragma mark  get

//get把传输的数据放在连接地址里面

- (void)loadDada5

{

    NSString *interfaceString = @"http://apis.baidu.com/showapi_open_bus/mobile/find";

    NSString *requestContentString = @"num=13370116152";

    NSString *urlString = [NSString stringWithFormat:@"%@?%@",interfaceString,requestContentString];

    

//    把地址连接字符串 转成NSUTF8StringEncoding

    NSURL *url = [NSURL URLWithString:[urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];//这一步步是必须的

//    可变请求 可以添加 请求方式 以及请求的 请求头 或者更多  timeoutInterval:请求时间超过时间不在发送请求cachePolicy:缓存内容的方式

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:5     ];

    request.HTTPMethod = @"GET";//指定http的请求方式  大写

//    apiKey发送给服务器 指定的请求头 位置

    NSString *apiKey = @"e7f5ac9e7c42a6c8cb125ee1d7e8779e";

    [request addValue:apiKey forHTTPHeaderField:@"apiKey"];

    

    

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

        NSLog(@"%@",response);

#pragma mark解析文件

        //data转换成json文件

    NSDictionary *info = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];

        NSLog(@"%@",info);

       

    }];


}



#pragma mark 通过URL 获得到 URL里面的内容 (字符串)

- (void)loadData1

{

    NSURL *url = [NSURL URLWithString:@"https://www.baidu.com"];//通过这个方法 把字符串转成NSURL

    NSString *content = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];//url转化成字符串类型的文件 NSUTF8StringEncoding 插口的编码格式

    NSLog(@"%@",content);

}

#pragma mark  通过URL 获得URL里面的数据

- (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 = UIViewContentModeScaleAspectFit;

    imageView.image = [UIImage imageWithData:data];

    [self.view addSubview:imageView];

    

}

#pragma mark  网络请求

//分为:同步请求和异步请求

//同步请求:等所有操作执行完成之后 再执行下一步

//同步请求的弊端:会遇到假装死了的情况 (只要请求操作没有执行完毕 就不会再去相应任何事件(再同一线程))

//异步请求: 在程序运行的时候 会利用空闲的时间去执行里面的操作 不会影响到同一线程里面的其他操作

#pragma mark  同步请求

-(void)loadData3{

    NSURL *url = [NSURL URLWithString:@"http://preview.quanjing.com/is_rm001/is0997q92.jpg"];//连接地址

//    实例化 请求对象 里面携带着请求地址

    NSURLRequest *request = [NSURLRequest requestWithURL:url];//NSURLRequest请求类 里面必须包含url 客户端

      NSData *data =[NSURLConnection sendSynchronousRequest:request  returningResponse:nil error:nil];//SynchronousRequest 发送同步请求

   

    UIImageView *imageView = [[UIImageView alloc]initWithFrame:self.view.frame];

    imageView.contentMode = UIViewContentModeScaleAspectFit;

    imageView.image = [UIImage imageWithData:data];

    [self.view addSubview:imageView];

    

}

#pragma mark    异步请求

-(void)loadData4

{

    

    UIImageView *imageView = [[UIImageView alloc]initWithFrame:self.view.frame];

    imageView.contentMode = UIViewContentModeScaleAspectFit;

    //    imageView.image = [UIImage imageWithData:data];

    [self.view addSubview:imageView];

    

    NSURL *url = [NSURL URLWithString:@"http://preview.quanjing.com/is_rm001/is0997q93.jpg"];

    NSURLRequest *request = [NSURLRequest requestWithURL:url];//NSURLRequest请求类 里面必须包含url 客户端

//    需要通过 连接 异步请求 发送

    NSOperationQueue *queue = [[NSOperationQueue alloc]init];

//    发送一个异步请求 queue这线程里面去执行 response服务器回应的内容 (回应状态的code  以及errodata:回应给客户端需要的数据

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

        NSLog(@"%@",response);

        imageView.image = [UIImage imageWithData:data];

    }];

//    sendAsynchronousRequest发送异步请求 NSOperationQueue:线程(类似于左脑和右脑 可以同时干布同的事情)

    

}


- (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}


@end


————————————DataManeger.h————————————-


#import <Foundation/Foundation.h>

#import <sqlite3.h>

@interface DataManeger : NSObject

{

        sqlite3 *db;

}

/* 创建数据库表格的方法  

 @praram需要传一个sql语句

 @return yes: 创建表成功 NO:表失败

 */

+(instancetype)shareDataManeger;

- (BOOL)createTableWithSql:(NSString *)sql;

/* //插入数据的方法  @param sql yes:插入成功 no:插入失败 */

- (BOOL)insertMassageWithSql:(NSString *)sql;

//删除数据 sql 语句

- (BOOL)deleteMassageWithSql:(NSString *)sql;

//修改数据 @param sql YES:插入成功 NO:插入失败

- (BOOL)modifyMassageWithSql:(NSString *)sql;

//查询数据 @param sql 语句 obj 要查询的值 column 要查询的字段 @return 查询结果

- (NSArray*)queryMassageWithSql:(NSString *)sql andObject:(NSString *)obj ;

//- (NSArray *) searchManageWithSQL:(NSString *)sql andObject:(NSString *)obj;


@end




—————————————————-DataManeger.h——————————


#import <Foundation/Foundation.h>

#import <sqlite3.h>

@interface DataManeger : NSObject

{

        sqlite3 *db;

}

/* 创建数据库表格的方法  

 @praram需要传一个sql语句

 @return yes: 创建表成功 NO:表失败

 */

+(instancetype)shareDataManeger;

- (BOOL)createTableWithSql:(NSString *)sql;

/* //插入数据的方法  @param sql yes:插入成功 no:插入失败 */

- (BOOL)insertMassageWithSql:(NSString *)sql;

//删除数据 sql 语句

- (BOOL)deleteMassageWithSql:(NSString *)sql;

//修改数据 @param sql YES:插入成功 NO:插入失败

- (BOOL)modifyMassageWithSql:(NSString *)sql;

//查询数据 @param sql 语句 obj 要查询的值 column 要查询的字段 @return 查询结果

- (NSArray*)queryMassageWithSql:(NSString *)sql andObject:(NSString *)obj ;

//- (NSArray *) searchManageWithSQL:(NSString *)sql andObject:(NSString *)obj;


@end


————————————DataManeger.m—————————————————


#import "DataManeger.h"

static DataManeger *manager = nil;

@implementation DataManeger

+(instancetype)shareDataManeger

{

    static dispatch_once_t onceToken;

    dispatch_once(&onceToken, ^{

        manager = [[DataManeger alloc] init];

    });

    return manager;

}

- (int)openDB

{

    //     1.打开数据库 建表

    NSString *dbPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]stringByAppendingPathComponent:@"数据库.sqlite"];//写路径

    NSLog(@"%@",dbPath);


    

    int result = sqlite3_open([dbPath UTF8String], &db);//打开数据库 返回值是一int类型的值

//    if (result == SQLITE_OK) {

//        NSLog(@"打开成功");

//    }else{

//        NSLog(@"打开失败");

//    }

//    [self createTableWithSql:];

    return result;

}

- (int)closeDB

{

//    关闭数据库

    return sqlite3_close(db);

}

//- (BOOL)createTable

//{

//    

//}

- (BOOL)createTableWithSql:(NSString *)sql

{

    if ([self openDB] == SQLITE_OK) {

//        建表的SQL语句  primary key autoincrement:第一id为主题  值是自动增长的

//        name text not null unique 保证不能为空也不能重复

//        建表的公式:  create table 表名 (字段名 字段的类型, 字段名字 字段的数据类型....

//        NSString *sql = @"create table if not exists user (id integer primary key autoincrement, name text not null unique, phone text, creatDate text);";

        char *error;

        sqlite3_exec(db, [sql UTF8String], NULL, NULL, &error);

//        建表如下

        int result = sqlite3_exec(db, [sql UTF8String], NULL, NULL, &error);

//

        

        if (result == SQLITE_OK) {

            [self closeDB];

                    NSLog(@"打开成功");

            return YES;

                }else{

                    NSLog(@"打开失败");

                    [self closeDB];

                    return NO;

                }

        

    }

    return NO;

}

//插入数据

- (BOOL)insertMassageWithSql:(NSString *)sql

{

//    打开数据库

    if ([self openDB] == SQLITE_OK ) {

        char *error;

       int result = sqlite3_exec(db, [sql UTF8String], NULL, NULL, &error);

        if (result == SQLITE_OK) {

            return YES;

        }else{

            return NO;

        }

    }

    return NO;

}

//删除数据

- (BOOL)deleteMassageWithSql:(NSString *)sql

{

    if ([self openDB] == SQLITE_OK ) {

        char *error;

        int result = sqlite3_exec(db, [sql UTF8String], NULL, NULL, &error);

        if (result == SQLITE_OK) {

            return YES;

        }else{

            return NO;

        }

    }

    return NO;

}

//修改数据

- (BOOL)modifyMassageWithSql:(NSString *)sql

{

    if ([self openDB] == SQLITE_OK ) {

        char *error;

        int result = sqlite3_exec(db, [sql UTF8String], NULL, NULL, &error);

        if (result == SQLITE_OK) {

            return YES;

        }else{

            return NO;

        }

    }

    return NO;


}

- (NSArray*)queryMassageWithSql:(NSString *)sql andObject:(NSString *)obj 

{

    // 先申明一个结果集 查询的结果存在结果集里面

    sqlite3_stmt *stmt;

//    打开数据库

    if ([self openDB]== SQLITE_OK) {

        

        //校验SQL语句是否正确

        //    int nByte -1 的时候 不限制 查询的长度

        if (sqlite3_prepare_v2(db, [sql UTF8String], -1,& stmt , NULL)== SQLITE_OK) {

            NSString *searchContent = [NSString stringWithFormat:@"%%%@%%",obj];//表示只要有@这个的都能够找到

            //        绑定要查询的内容

            NSMutableArray *resultList = [NSMutableArray array];//用来装所有查询到得数据


            if (  sqlite3_bind_text(stmt,1, [searchContent UTF8String], -1, NULL)== SQLITE_OK) {

                

                               while (sqlite3_step(stmt)==SQLITE_ROW) {

                    //                NSMutableArray *info = [NSMutableArray array];

                    //                icol 是查询到得 这一列数据的列数

                    char *name = (char *)sqlite3_column_text(stmt, 1);

                    char *phone =(char *) sqlite3_column_text(stmt, 2);

                    char *time = (char *)sqlite3_column_text(stmt, 3);

                    //                把查询到得一条数据 整合到一个字典里

                    NSDictionary *info = @{@"name":[NSString stringWithUTF8String:name],@"phone":[NSString stringWithUTF8String:phone],@"time":[NSString stringWithUTF8String:time]};

                    

                    [resultList addObject:info];

                }

                

                [self closeDB];

                return resultList;

                 

            }

            

        }


    }

         return nil;

    }


@end


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值