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通訊,就是不加密的通訊!

全部信息明文傳播,帶來了三大風險:php

竊聽風險(eavesdropping):第三方能夠獲知通訊內容。html

篡改風險(tampering):第三方能夠修改通訊內容。ios

冒充風險(pretending):第三方能夠冒充他人身份參與通訊。json

SSL/TLS協議是爲了解決這三大風險而設計的,但願達到:
全部信息都是加密傳播,第三方沒法竊聽。
具備校驗機制,一旦被篡改,通訊雙方會馬上發現。
配備身份證書,防止身份被冒充。api


HTTP協議的使用
1.請求:客戶端向服務器索要數據.

http協議規定:一個完整的http請求包含** '請求行 ', '請求頭' , '請求體' **三個部分;服務器

請求行:包含了請求方法,請求資源路徑,http協議版本. "GET /resources/images/ HTTP/1.1"網絡

請求頭:包含了對客戶端的環境描述,客戶端請求的主機地址等信息.session

請求體:客戶端發給服務器的具體數據,好比文件/圖片等.app

2.響應:服務器返回客戶端想要的數據

http協議規定:一個完整的http響應包含'狀態行','響應頭','實體內容'三個部分;post

狀態行:包含了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
// 一、在info.plist文件中添加row
 app row -> app Transport Security Settings (展開) -> Allow Arbirary Loads (string -> Yes)(容許http請求)

//二、圖片下載
- (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

相關文章
相關標籤/搜索