是在Mac下經常使用的截取網絡封包的工具,在作iOS開發時,咱們爲了調試與服務器端的網絡通信協議,經常須要截取網絡封包來分析。Charles經過將本身設置成系統的網絡訪問代理服務器,使得全部的網絡訪問請求都經過它來完成,從而實現了網絡封包的截取和分析。html
Charles主要的功能包括:ios
安裝Charles & 介紹:git
一、官方網站(http://www.charlesproxy.com)下載最新版的Charles安裝包;github
二、如須要截取分析SSL協議相關的內容。那麼須要安裝Charles的CA證書。具體步驟以下:json
三、Charles封包的視圖:「Structure」 & "Sequence"後端
原文連接:http://www.devtang.com/blog/categories/ios/數組
-------------服務器
--收集 & 分享網絡
一、下載Charles抓包工具(iOS):--已經破解,可直接使用!工具
下載地址:http://yun.baidu.com/s/1GvxaY
二、截取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。
三、截取SSL信息:
Charles默認並不截取SSL的信息,若是你想對截取某個網站上的全部SSL網絡請求,能夠在該請求上右擊,選擇SSL proxy。
緣由:在作iPhone開發的時候,咱們經常須要模擬慢速網絡或者高延遲的網絡,以測試在移動網絡下,應用的表現是否正常。
TODO:在Charles的菜單,選擇"Proxy"->"Throttle Setting"項,勾選上「Enable Throttling」,而且能夠設置Throttle Preset的類型。
五、修改網絡請求內容:
有些時候爲了調試服務器的接口,咱們須要反覆嘗試不一樣參數的網絡請求。
Charles提供:「網絡請求的修改」和「重發」功能。只須要在以往的網絡請求上點擊右鍵,選擇「Edit」,便可建立一個可編輯的網絡請求。
PS:咱們能夠修改該請求的任何信息,包括url地址,端口,參數等,以後點擊「Execute」便可發送該修改後的網絡請求(以下圖所示)。
Charles支持咱們屢次修改和發送該請求,這對於咱們和服務器端調試接口很是方便。
六、過濾網絡請求《----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