Charles:
是在Mac下常用的截取網絡封包的工具,在做iOS開發時,我們為了調試與服務器端的網絡通訊協議,常常需要截取網絡封包來分析。Charles通過將自己設置成系統的網絡訪問代理服務器,使得所有的網絡訪問請求都通過它來完成,從而實現了網絡封包的截取和分析。
Charles主要的功能包括:
- 支持SSL代理。可以截取分析SSL的請求。
- 支持流量控制。可以模擬慢速網絡以及等待時間(latency)較長的請求。
- 支持AJAX調試。可以自動將json或xml數據格式化,方便查看。
- 支持AMF調試。可以將Flash Remoting 或 Flex Remoting信息格式化,方便查看。
- 支持重發網絡請求,方便后端調試。
- 支持修改網絡請求參數。
- 支持網絡請求的截獲並動態修改。
- 檢查HTML,CSS和RSS內容是否符合W3C標准。
安裝Charles & 介紹:
1、官方網站(http://www.charlesproxy.com)下載最新版的Charles安裝包;
2、如需要截取分析SSL協議相關的內容。那么需要安裝Charles的CA證書。具體步驟如下:
- 去 http://www.charlesproxy.com/ssl.zip 下載CA證書文件。
- 解壓該zip文件后,雙擊其中的.crt文件,這時候在彈出的菜單中選擇“總是信任”
3、Charles封包的視圖:“Structure” & "Sequence"
- Structure視圖將網絡請求按訪問的域名分類。
- Sequence視圖將網絡請求按訪問的時間排序。
原文鏈接:http://www.devtang.com/blog/categories/ios/
-------------
TODO:
--收集 & 分享
1、下載Charles抓包工具(iOS):--已經破解,可直接使用!
下載地址:http://yun.baidu.com/s/1GvxaY
2、截取iPhone上的網絡封包: 《------Main
1.[Clarles設置]將Charles的代理功能打開。在Charles的菜單欄上選擇 “Proxy”->"Proxy Settings"
填入代理端口8888,並且勾上"Enable transparent HTTP proxying" 就完成了在Charles上的設置。
2.[iPhone設置]將獲取到的電腦IP地址(終端$ifconfig en0--查看網卡en0的IP地址),在iPhone手機同一局域網下,設置HTTP代理協議
填入電腦的IP,並且寫入端口8888。
3、截取SSL信息:
Charles默認並不截取SSL的信息,如果你想對截取某個網站上的所有SSL網絡請求,可以在該請求上右擊,選擇SSL proxy。
4、模擬慢速網絡獲取數據:
原因:在做iPhone開發的時候,我們常常需要模擬慢速網絡或者高延遲的網絡,以測試在移動網絡下,應用的表現是否正常。
TODO:在Charles的菜單,選擇"Proxy"->"Throttle Setting"項,勾選上“Enable Throttling”,並且可以設置Throttle Preset的類型。
5、修改網絡請求內容:
有些時候為了調試服務器的接口,我們需要反復嘗試不同參數的網絡請求。
Charles提供:“網絡請求的修改”和“重發”功能。只需要在以往的網絡請求上點擊右鍵,選擇“Edit”,即可創建一個可編輯的網絡請求。
PS:我們可以修改該請求的任何信息,包括url地址,端口,參數等,之后點擊“Execute”即可發送該修改后的網絡請求(如下圖所示)。
Charles支持我們多次修改和發送該請求,這對於我們和服務器端調試接口非常方便。
6、過濾網絡請求《----Main
通常情況下,我們需要對網絡請求進行過濾,只監控向指定目錄服務器上發送的請求。對於這種需求,我們有2種辦法。
-
在主界面的中部的Filter欄中填入需要過濾出來的關鍵字。例如我們的服務器的地址是:http://www.baidu.com,那么只需要在Filter欄中填入baidu即可。
-
在Charles的菜單欄選擇"Proxy"->"Recording Settings",然后選擇Include欄,選擇添加一個項目,然后填入需要監控的協議,主機地址,端口號。這樣就可以只截取目標網站的封包了
TODO:[“Proxy”->“Recording Setting”->“Include”->“Add”->填寫內容:http, baidu.com, 80]
--------------------
“網易新聞”--數據攔截:
[ c.m.163.com/nc/article/headline/T1348647853363/0-100.html ]
- (void)loadData { NSURL *url = [NSURL URLWithString:@"http://c.m.163.com/nc/article/headline/T1348647853363/0-20.html"]; NSURLRequest *request = [NSURLRequest requestWithURL:url]; [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) { NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:0 error:NULL]; // NSLog(@"%@", dict); // 拿到字典中第一項的數組 // 使用 keyEnumerator.nextObject 可以快速遍歷字典的鍵值 NSLog(@"%@", dict.keyEnumerator.nextObject); // 取字典鍵值的小技巧,對於網易新聞,可以直接過濾掉第一層字典 NSArray *array = dict[dict.keyEnumerator.nextObject]; NSLog(@"%@", array); // 遍歷數組,字典轉模型 NSMutableArray *arrayM = [NSMutableArray arrayWithCapacity:array.count]; [array enumerateObjectsUsingBlock:^(NSDictionary *dict, NSUInteger idx, BOOL *stop) { News *news = [News newsWithDict:dict]; [arrayM addObject:news]; NSLog(@"%@", news.objectInfo); }]; }]; }
|--> Copyright (c) 2015 Bing Ma.
|--> GitHub RUL: https://github.com/SpongeBob-GitHub