Fiddler iOS:掌握iOS端調試利器

Fiddler是一款流行的跨平台Web調試工具,近年來,它也逐漸深入到移動端領域。在移動端,Fiddler iOS版作為一款iOS設備調試利器, 彌補了Xcode Instrument的不足,對於iOS端調試問題有著非常重要的意義。

一、安裝和啟動

Fiddler iOS版的安裝非常簡單,可以直接在App Store中搜索Fiddler進行安裝。進入應用後,點擊啟動按鈕即可調起代理服務。

這時,需要我們將手機的代理設置為Fiddler iOS版的IP地址和埠號。Fiddler默認的埠是8888,可以在設置中進行修改。設置完成後,在iOS設備上打開任意的網路應用,在Fiddler的過濾器中即可看到攔截到的網路請求。


    //Fiddler iOS版中啟動代理監聽的代碼
    @interface AppDelegate : UIResponder <UIApplicationDelegate>
    
    @property (strong, nonatomic) UIWindow *window;
    
    
    @end
    
    #import "AppDelegate.h"
    #import "FlipsideViewController.h"
    #import "FiddlerProxy.h"
    
    #define kShowGuideAfterRunTime 3 // Run timer 3 seconds away from request API again
    
    @implementation AppDelegate {
        NSTimer *requestApiTimer;   // timer for sending request API every few seconds
    }
    
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        // Override point for customization after application launch.
        
        [NSURLProtocol registerClass:[FiddlerProxy class]];
        
        return YES;
    }
    
    @end

二、HTTP與HTTPS請求捕獲

在iOS端的開發中,我們往往需要通過網路請求與後台進行交互,通過Fiddler iOS版,我們可以抓取HTTP和HTTPS請求,方便我們對網路請求進行監控和分析。

對於HTTPS請求的抓取,需要進行證書的安裝和信任,Fiddler iOS版提供了便捷的證書導入功能。在App的設置中,可以進行證書的導入和信任操作。

同時,Fiddler iOS版還提供了WebSocket的捕獲和監控,支持對網路請求的攔截以及黑白名單的設置,更加方便我們對網路請求進行調試和追蹤。


    //HTTPS請求捕獲的示例代碼
    @implementation FiddlerProxy
    
    static NSDictionary *__certificateDictionaries;
    
    + (NSDictionary *)certificateDictionaries {
        if (__certificateDictionaries == nil) {
            __certificateDictionaries = @{
                                          @"www.baidu.com" : @"baidu.com.der",
                                          @"www.apple.com" : @"apple.com.der"
                                          };
        }
        return __certificateDictionaries;
    }
    
    + (BOOL)canInitWithRequest:(NSURLRequest *)request {
        NSURL *url = [request URL];
        if ([[url scheme] isEqualToString:@"https"]) {
            NSString *filename = [self certificateDictionaries][[url host]];
            if (filename) {
                [self installCertificate:filename];
                return YES;
            }
        }
        return NO;
    }
    
    + (void)installCertificate:(NSString *)filename {
        NSData *certificateData = [FiddlerProxy dataWithResource:filename];
        if (certificateData) {
            CFDataRef cfCertificateData = (__bridge CFDataRef)certificateData;
            SecCertificateRef certificate = SecCertificateCreateWithData(NULL, cfCertificateData);
            if (certificate!=NULL) {
                CFArrayRef certArray = CFArrayCreate(NULL, (void *)&certificate, 1, NULL);
                NSDictionary *dict = @{ (__bridge id)kSecImportExportPassphrase: @"fiddler" };
                SecPKCS12Import((CFDataRef)[FiddlerProxy dataWithResource:@"fiddler.pfx"],
                                (__bridge CFDictionaryRef)dict,
                                &certArray);
            }
        }
    }
    
    @end

三、修改請求內容

在很多場景下,我們需要修改網路請求的請求頭或請求體,對於這類場景,Fiddler iOS版提供了非常便捷的方式。我們只需要在Fiddler iOS版中找到對應的請求,進行編輯,即可將請求的內容修改為我們期望的內容。

同時,Fiddler iOS版還支持對請求的鏈接進行修改,更加方便我們對單個請求的定製化的調試工作。


    //修改請求內容的示例代碼
    - (void)updateRequest:(NSMutableURLRequest *)mutableRequest {
        
        NSString *url = [[mutableRequest URL] absoluteString];
        
        // Rewrite API URL
        url = [url stringByReplacingOccurrencesOfString:@"http://example.com/"
                                             withString:@"http://example2.com/"
                                                options:0
                                                  range:NSMakeRange(0, url.length)];
        [mutableRequest setURL:[NSURL URLWithString:url]];
        
        // Set an Access Token header on every request
        
        NSString *accessToken = @"..."; // Your access token here
        
        [mutableRequest setValue:[@"Bearer " stringByAppendingString:accessToken]
              forHTTPHeaderField:@"Authorization"];
    }

四、性能優化與緩存管理

在開發過程中,性能優化和緩存管理是我們必須要考慮的問題。Fiddler iOS版提供了PageSpeed Insights功能,可以對移動網站的性能進行分析,並給出相應的優化建議。同時,Fiddler iOS版還提供了豐富的緩存管理功能,可以對緩存進行定製化的設置和管理。

除此之外,Fiddler iOS版還支持網路請求的cookie管理,提高了測試過程的靈活性和準確性。


    //緩存管理的示例代碼
    - (NSCachedURLResponse *)cachedResponseForRequest:(NSURLRequest *)request {
        NSCachedURLResponse *cachedResponse = [super cachedResponseForRequest:request];
        
        if (cachedResponse != nil) {
            NSMutableData *data = [cachedResponse.data mutableCopy];
            NSData *additionalData = [self.additionalCache objectForKey:request.URL.absoluteString];
            if (additionalData) {
                [data appendData:additionalData];
            }
            cachedResponse = [[NSCachedURLResponse alloc] initWithResponse:cachedResponse.response
                                                                      data:data];
        }
        
        return cachedResponse;
    }
    
    - (void)storeCachedResponse:(NSCachedURLResponse *)cachedResponse
                     forRequest:(NSURLRequest *)request {
        [super storeCachedResponse:cachedResponse forRequest:request];
        
        NSURL *url = request.URL;
        NSData *data = cachedResponse.data;
        
        unsigned long long size = [url.host isEqualToString:@"static.example.com"] ? 1000000 : 50000;
        while (self.currentCacheSize + data.length > size && self.cachedRequests.count > 0) {
            NSURLRequest *cachedRequest = self.cachedRequests[0];
            NSCachedURLResponse *cachedResponse = [self cachedResponseForRequest:cachedRequest];
            self.currentCacheSize -= cachedResponse.data.length;
            [self.additionalCache removeObjectForKey:cachedRequest.URL.absoluteString];
            [self.cachedRequests removeObjectAtIndex:0];
        }
        
        [self.additionalCache setObject:data forKey:url.absoluteString];
        self.currentCacheSize += data.length;
        [self.cachedRequests addObject:request];
    }

五、結語

本文簡單介紹了Fiddler iOS版的安裝和使用,包括HTTP與HTTPS請求捕獲、修改請求內容、性能優化與緩存管理等方面。Fiddler iOS版是一款非常實用的網路調試工具,對於iOS端的開發和調試非常重要。我們希望通過本文的介紹,能夠幫助讀者更加深入的了解Fiddler iOS版,並能夠在實際開發中加以應用。

原創文章,作者:BOEGH,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/368497.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
BOEGH的頭像BOEGH
上一篇 2025-04-12 01:13
下一篇 2025-04-12 01:13

相關推薦

  • lsw2u1:全能編程開發工程師的利器

    lsw2u1是一款多功能工具,可以為全能編程開發工程師提供便利的支持。本文將從多個方面對lsw2u1做詳細闡述,並給出對應代碼示例。 一、快速存取代碼段 在日常開發中,我們總會使用…

    編程 2025-04-29
  • Python刷課:優化學習體驗的利器

    Python刷課作為一種利用自動化技術優化學習體驗的工具已經被廣泛應用。它可以幫助用戶自動登錄、自動答題等,讓用戶在學習過程中可以更加專註於知識本身,提高效率,增加學習樂趣。 一、…

    編程 2025-04-29
  • HBuilder2.0:一站式開發利器

    本文將從如下幾個方面對HBuilder2.0進行詳細闡述,幫助初學者快速了解並開始使用該工具: 一、簡介 HBuilder2.0是一個跨平台的HTML5集成開發工具。它綜合了編碼、…

    編程 2025-04-28
  • Powersploit:安全評估與滲透測試的利器

    本文將重點介紹Powersploit,並給出相關的完整的代碼示例,幫助安全人員更好地運用Powersploit進行安全評估和滲透測試。 一、Powersploit簡介 Powers…

    編程 2025-04-28
  • JL Transaction – 實現分散式事務管理的利器

    本文將為大家介紹JL Transaction,這是一款可以實現分散式事務管理的開源事務框架,它可以幫助企業在分散式環境下有效地解決事務的一致性問題,從而保障系統的穩定性和可靠性。 …

    編程 2025-04-28
  • 全自動股票交易軟體:實現自動交易賺取更多收益的利器

    全自動股票交易軟體是一款能夠幫助股票投資者實現自動交易,據此獲取更多收益的利器。本文將從多個方面詳細闡述該軟體的特點、優點、使用方法及相關注意事項,以期幫助讀者更好地了解和使用該軟…

    編程 2025-04-27
  • mfastboot:快速刷機利器

    本文將詳細闡述全能工程師如何使用mfastboot進行快速刷機,並且深入解析mfastboot的功能與優勢。 一、下載並配置mfastboot 1、首先,在Ubuntu中打開終端並…

    編程 2025-04-27
  • 如何解決Fiddler抓不到谷歌瀏覽器的包問題

    當使用Fiddler工具抓取網路數據包時,由於谷歌瀏覽器的加密機制,使得Fiddler無法直接抓取到谷歌瀏覽器發送的網路數據包。下面將從幾個方面闡述如何解決這個問題。 一、關閉谷歌…

    編程 2025-04-27
  • iOS開發如何添加許可權

    在iOS開發中,為了保護用戶的隱私和安全,應用程序可能需要請求一些許可權。 一、請求應用程序許可權 應用程序不得在用戶未給予許可的情況下獲取用戶數據。許多iOS系統功能都需要獲得用戶的…

    編程 2025-04-27
  • Pip scripts:Python包管理的利器

    Python的流行已經不可避免,Python的實用性也使得這門語言成為了數據科學和機器學習領域的必備語言。在Python中,包管理器是一種非常重要的工具,可以讓開發人員便捷地使用、…

    編程 2025-04-27

發表回復

登錄後才能評論