iOS # Charles攔截封包

Charles

  是在Mac下經常使用的截取網絡封包的工具,在作iOS開發時,咱們爲了調試與服務器端的網絡通信協議,經常須要截取網絡封包來分析。Charles經過將本身設置成系統的網絡訪問代理服務器,使得全部的網絡訪問請求都經過它來完成,從而實現了網絡封包的截取和分析。html

  

Charles主要的功能包括:ios

  1. 支持SSL代理。能夠截取分析SSL的請求。
  2. 支持流量控制。能夠模擬慢速網絡以及等待時間(latency)較長的請求。
  3. 支持AJAX調試。能夠自動將json或xml數據格式化,方便查看。
  4. 支持AMF調試。能夠將Flash Remoting 或 Flex Remoting信息格式化,方便查看。
  5. 支持重發網絡請求,方便後端調試。
  6. 支持修改網絡請求參數。
  7. 支持網絡請求的截獲並動態修改。
  8. 檢查HTML,CSS和RSS內容是否符合W3C標準

 

安裝Charles & 介紹:git

一、官方網站(http://www.charlesproxy.com)下載最新版的Charles安裝包;github

二、如須要截取分析SSL協議相關的內容。那麼須要安裝Charles的CA證書。具體步驟以下:json

  1. 去 http://www.charlesproxy.com/ssl.zip 下載CA證書文件。
  2. 解壓該zip文件後,雙擊其中的.crt文件,這時候在彈出的菜單中選擇「老是信任」

三、Charles封包的視圖:「Structure」 & "Sequence"後端

  1. Structure視圖將網絡請求按訪問的域名分類。
  2. Sequence視圖將網絡請求按訪問的時間排序。

 

原文連接:http://www.devtang.com/blog/categories/ios/數組

 

-------------服務器

TODO:

  --收集 & 分享網絡

一、下載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種辦法。

  1. 在主界面的中部的Filter欄中填入須要過濾出來的關鍵字。例如咱們的服務器的地址是:http://www.baidu.com,那麼只須要在Filter欄中填入baidu便可。

  2. 在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

相關文章
相關標籤/搜索