zoukankan      html  css  js  c++  java
  • http 的post 与get请求

    Paste_Image.png

    Paste_Image.png

    Paste_Image.png

    Paste_Image.png

    Paste_Image.png

    Paste_Image.png

    Paste_Image.png

    Paste_Image.png

    不使用SSL/TLS的HTTP通信,就是不加密的通信!

    所有信息明文传播,带来了三大风险:

    窃听风险(eavesdropping):第三方可以获知通信内容。

    篡改风险(tampering):第三方可以修改通信内容。

    冒充风险(pretending):第三方可以冒充他人身份参与通信。

    SSL/TLS协议是为了解决这三大风险而设计的,希望达到:
    所有信息都是加密传播,第三方无法窃听。
    具有校验机制,一旦被篡改,通信双方会立刻发现。
    配备身份证书,防止身份被冒充。


    HTTP协议的使用
    1.请求:客户端向服务器索要数据.

    http协议规定:一个完整的http请求包含** '请求行 ', '请求头' , '请求体' **三个部分;

    请求行:包含了请求方法,请求资源路径,http协议版本. "GET /resources/images/ HTTP/1.1"

    请求头:包含了对客户端的环境描述,客户端请求的主机地址等信息.

    请求体:客户端发给服务器的具体数据,比如文件/图片等.

    2.响应:服务器返回客户端想要的数据

    http协议规定:一个完整的http响应包含'状态行','响应头','实体内容'三个部分;

    状态行:包含了http协议版本,状态吗,状态英文名称.

    响应头:包含了对服务器的描述,对返回数据的描述.

    实体内容:服务器返回给客户端的具体数据(图片/html/文件...).

    3. 在iOS开发中,发送http请求的方案有很多,常见的有如下几种:

    苹果原生:

    1).NSURLConnection:用法简单,古老经典的一种方案.

    2).NSURLSession:iOS7以后推出的技术,功能NSURLConnection更加强大.

    3).CFNetWork: NSURL的底层,纯C语言,一般不用.

    1). NSURLConnection
    //NSURL 标识资源位置
    
    //NSURLRequest 标识网络请求内容
    
    //NSURLConnection 标识与客户端与服务器建立的网络连接
    
    //NSURLResponse 标识服务器给客户端的响应结果
    
    -(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
    
    //respond 回来的结果:status code: 200 ->表示请求成功 ,  404->找不到服务器
    
    NSLog(@"%@", response);
    
    }
    
    //设置代理
    //遵守协议 NSURLConnectionDataDelegate(设置代理)
    
    //网络请求的响应结果
    -(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response;
    
    //用来接收响应数据 多次调用(分段返回)
    - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data;//不全
    
    //网络请求结束
    - (void)connectionDidFinishLoading:(NSURLConnection *)connection;
    
    2).NSURLSession
    // 1、在info.plist文件中添加row
     app row -> app Transport Security Settings (展开) -> Allow Arbirary Loads (string -> Yes)(允许http请求)
    
    //2、图片下载
    - (void)viewDidLoad {
        [super viewDidLoad];
        //图片下载路径
       NSString *path = @"http://pic2.desk.chinaz.com/file/10.03.10/5/rrgaos36.jpg";
        //下载请求
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:path]];
    
        //创建默认会话配置对象
        NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
    
    //    后面队列的作用  如果给子线程队列则协议方法在子线程中执行 给主线程队列就在主线程中执行
        NSURLSession *session = [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:[NSOperationQueue mainQueue]]; //主线程中执行
    
        NSURLSessionDownloadTask *task = [session downloadTaskWithRequest:request];
        [task resume];
    
    
    }
    

    http的get与post

    1. 区别:

    GET: 默认方式,请求方式放在请求地址的后面通过?分割,多个参数通过&分割,通常从服务器要数据用get
    POST: 把请求参数放到请求体里面,通常給服务器传数据的时候用到post

    2. 注意:

    建议:提交用户的隐私数据一定要使用POST请求
    相对POST请求而言,GET请求的所有参数都直接暴露在URL中,请求的URL一般会记录在服务器的访问日志中,而服务器的访问日志是黑客攻击的重点对象之一
    用户的隐私数据如登录密码,银行账号等。

    1).get请求:
     - (void)viewDidLoad {
        [super viewDidLoad];
        //请求路径
        NSString *path = @"http://apis.juhe.cn/mobile/get?phone=18888888888&key=4e602dad4a05b4d491ffb82511613158";
        NSURL *url = [NSURL URLWithString:path];
        //创建请求
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    
        //创建网络会话对象
        NSURLSession *session = [NSURLSession sharedSession];
        //创建数据任务
        NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
    
            //data为服务器返回的数据
    //        NSString *string = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
    //        NSLog(@"%@",string);
    
            //把服务器返回的json数据 直接转成字典
            NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
            NSDictionary *resultDic = dic[@"result"];
            NSString *province = resultDic[@"province"];
            NSString *city = resultDic[@"city"];
            NSString *company = resultDic[@"company"];
            NSLog(@"%@省 %@市  %@",province,city,company);
    
        }];
        //开始任务
        [dataTask resume];
    
    }```
    
    
    ######2).post请求:
    
        ```
    
        - (void)viewDidLoad {
        [super viewDidLoad];
        //请求的数据不在path里面
        NSString *path = @"http://v.juhe.cn/joke/randJoke.php";
    
        NSURL *url = [NSURL URLWithString:path];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        //设置请求方式为POST,请求内容写在body里面
        [request setHTTPMethod:@"POST"];
        [request setHTTPBody:[@"key=8d0bde7167db666ac160191217840b5b&type=pic" dataUsingEncoding:NSUTF8StringEncoding]];
        NSURLSessionDataTask *task = [[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
    
            NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
            NSLog(@"%@",dic);
    
        }];
        //开始请求
        [task resume];
    
    
    }
    

    Paste_Image.png

    成功的三大原则: 1、坚持 2、不要脸 3、坚持不要脸
  • 相关阅读:
    ndarray转PIL
    215. 数组中的第K个最大元素
    pytorch的分布式
    剑指 Offer 06. 从尾到头打印链表
    最长公共子序列
    剑指 Offer 57
    剑指 Offer 59
    剑指 Offer 48. 最长不含重复字符的子字符串
    Python线程池
    Python 常用内置函数
  • 原文地址:https://www.cnblogs.com/xulinmei/p/7419977.html
Copyright © 2011-2022 走看看