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