美文网首页
Charles抓不到配置正确的接口(iOS)

Charles抓不到配置正确的接口(iOS)

作者: 强子ly | 来源:发表于2023-12-05 17:17 被阅读0次

前言

今天这事儿很可乐,干了8年开发,自认为对Charles用的不说头头是道,也是炉火纯青了吧,18年写的那篇《关于https抓包那点事》 简书也有几十个点赞,今天这个问题确实第一次遇到

问题

在其他部门的项目上,配合server接口新增一个字段,遇到问题不想去跑项目了,想抓包看看,结果Charles里面居然没有对应的url列表。(而且很奇怪的就是ReactNative包里面能抓,原生的不能抓)

排查了Charles版本、证书、网络ip等等,还是没解决,刚好看到一片文章 iOS小技能:APP 不走全局proxy的方案(隧道APP的请求接口,一些自己特殊接口不走隧道),又填补了一个知识盲区

空的Charles列表

1、核心

NSURLSessionConfiguration 的 connectionProxyDictionary 属性设置成空字典,请求就不会走全局设置的proxy,也就是Charles列表都不会显示抓包的数据

NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
configuration.connectionProxyDictionary = @{};
...

2、调试优化

  • 2.1、测试环境可抓包:采用debug编译配置
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];

#ifdef DEBUG
configuration.connectionProxyDictionary = @{};
#endif
  • 2.2、一劳永逸:搞两个AFHTTPSessionManager,结合server搞一个白名单
  • 白名单里面的url走_sessionManager
  • 非白名单里面的url走_nonProxySessionManager
@interface XYNetworkProxy ()
{
    AFHTTPSessionManager *_sessionManager;
    AFHTTPSessionManager *_nonProxySessionManager;
    ....
}

@end

- (void)initSessionManager {
    _sessionManager = [[AFHTTPSessionManager alloc] initWithBaseURL:nil sessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];

    NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
    configuration.connectionProxyDictionary = @{}; // 设置后不走代理
    _nonProxySessionManager = [[AFHTTPSessionManager alloc] initWithBaseURL:nil sessionConfiguration:configuration];
}

- (AFHTTPSessionManager *)sessionManager {
    // 白名单内部的url走_sessionManager
    if (self.whitelist.count > 0 && [self.whitelist containsObject:url.host]) {
        return _sessionManager;
    }
    return _nonProxySessionManager;
}

相关文章

网友评论

      本文标题:Charles抓不到配置正确的接口(iOS)

      本文链接:https://www.haomeiwen.com/subject/kwjdgdtx.html