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、坚持不要脸
原文地址:https://www.cnblogs.com/xulinmei/p/7419977.html