你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS開發——使用Charles進行http網絡抓包詳解

iOS開發——使用Charles進行http網絡抓包詳解

編輯:IOS開發綜合

我在之前一篇博客《網絡抓包工具Charles的介紹與使用》中簡單介紹了Charles的安裝破解,以及進行簡單的Charles抓包配置的介紹。今天我們來詳細介紹下使用Charles進行http抓包,關於https抓包,我將會在另一篇博客中介紹。

(1)http抓包的配置,請參考《網絡抓包工具Charles的介紹與使用》這篇博客。

(2)為了使抓包的結果清晰,便於調試,我寫了一個簡單的網絡請求,通過點擊按鈕請求查詢號碼歸屬地,代碼如下:

 

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];

}

- (IBAction)networkRequestPressed:(id)sender {

 NSString *urlAsString = [@"http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx/getMobileCodeInfo?mobileCode=18888888888&userId=" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];

  NSURL *url = [NSURL URLWithString:urlAsString];
  NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:url];
  [urlRequest setTimeoutInterval:30];
  [urlRequest setHTTPMethod:@"GET"];

  //推薦使用這種請求方法;
  NSURLSession *session = [NSURLSession sharedSession];

  __block  NSString *result = @"";
  NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:urlRequest completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {

    if (!error) {
      //沒有錯誤,返回正確;
      result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
      NSLog(@"返回正確:%@",result);

    }else{
      //出現錯誤;
      NSLog(@"錯誤信息:%@",error);
    }

  }];

  [dataTask resume];

}

@end

(3)點擊按鈕進行網絡請求後,返回結果如下:

 

\

 

(4)下面開始進行抓包(如何配置請參考:網絡抓包工具Charles的介紹與使用)。注意哦:需要在真機上測試!進行網絡請求後,Charles輸出如下:

\

 

我現在對上面的http抓包結果進行詳解。

【1】

\

左側是顯示結構:Structure是樹狀結構顯示,Sequence是水平結構顯示。兩者基本類似,我以樹狀結構來進行介紹。左側的樹狀結構是我進行網絡請求的url鏈接,每一個層級表示了以“/”隔開的子域名。通過上述的代碼也可以看到我GET請求的url鏈接是:http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx/getMobileCodeInfo?mobileCode=18888888888&userId= ;與樹狀結構中顯示的一致。

【2】

\

 

右側是詳情頁,其中第一個Overview是概覽。我對一些字段進行介紹:

(1)URL:我進行網絡請求的鏈接;

(2)Status:當前狀態,complete表示請求完成;

(3)Responce Code:返回碼。不同的接口,不同的請求結果,返回碼都不同;

(4)Protocol:使用的協議;

(5)Method:請求方式,如GET請求,POST請求等;

(6)Kept Alive:判斷當前是否正在鏈接(活躍);

(7)Content-Type:發送的內容類型,如這裡用的是XML文本,以UTF8的方式發送;

(8)Client Address:客戶端的IP地址;

(9)Remote Address:遠程服務器的IP;

 

Timing:

(10)Request Start Time:請求開始的時間;

(11)Request End Time:請求結束的時間;

(12)Response Start Time:返回開始的時間;

(13)Response End Time:返回結束的時間;

 

Size:

(14)Request Header :請求的頭部大小;

(15)Request Header:返回的頭部大小;

(16)Request : 請求發送的大小;

(17)Response:返回數據的大小;

(18)Total:所有數據大小;

(19)Request Compression :請求壓縮;

(20)Response Compression: 返回壓縮;

 

【3】

\

 

第二個頁面是關於請求發送的。下面的Headers,Query String,Raw。

(1)Headers:發送請求的頭部信息;

(2)Query String:發送參數列表;

(3)Raw:發送的原生數據,包括了頭部和參數;

 

【4】

\

 

右側的Response的是關於所有返回信息的。

(1)Headers:是返回的頭部信息;

(2)Text:返回信息(除去頭部)後的文本;

(3)Hex:返回信息的16進制表示;

(4)XML:我返回的數據是XML。如果你返回的是JSON,這裡就會顯示JSON;

(5)XML Text:如果你返回JSON,這裡會顯示JSON Text;

(6)Raw:返回的所有原生數據,包括頭部;

 

【5】

\

 

裡面是發送數據的一些簡要信息。

 

【6】

\

是一些簡要信息的圖表表示。

現在我對Charles頂部的一些常用的工具欄做一個介紹:

(1)New Session:新建一個會話。也就是在一個新的Charles界面查看網絡情況;

\

(2)Open Session:打開一個之前保存的會話;

\

(3)Close the current Session:關閉當前的會話;

\

(4)Save the current Session:保存當前的會話;

\

(5)Clear the current Session:清空當前的會話(比較方便,常用);

\

(6)Find Text in the current session:相當於查找功能;

\

 

總結,通過Charles來抓包網絡請求,讓我們對項目的流程有一個大概的認識,這對於入手一個復雜的項目很有幫助。這也有利於我們測試網絡情況,調試程序,監測性能。同時,網絡抓包也不僅限於iOS的開發,也可以用在其他的開發領域中。當然,可能某些App存在所謂的後門,竊取你手機上的隱私,你是不是也可以通過抓包來判斷呢?我將在下一篇博客中介紹如何進行Charles的https抓包。

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved