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

來源:互聯網
上載者:User

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

我在之前一篇部落格《網路抓包工具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抓包。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.