Flutter app不使用Fiddler代理

时间:2018-03-02 10:35:02

标签: android fiddler flutter

我刚开始玩Flutter,现在正在尝试做一些简单的HTTP请求。我总是使用Fiddler和代理来调试从android应用程序发送的请求,但是从Flutter发送的请求似乎没有显示。

有什么方法可以让Fiddler显示Flutter请求,还是我可以/应该使用其他一些HTTP请求调试工具/监视器?

4 个答案:

答案 0 :(得分:2)

我和Drony做了一些测试,然后我开始工作了。还有一个问题,我无法再发送HTTPS请求,因为Dart / Flutter没有简单的方法来信任所有SSL证书。我此时可以调试HTTP请求。

我的API仅支持HTTPS请求,因此在我的Flutter应用中,我请求HTTP版本,然后通过Fiddler将其转发到HTTPS API: (以下代码进入OnBeforeRequest函数)

    if (!oSession.isHTTPS && oSession.HostnameIs("api.xxxx.me")){
        oSession.fullUrl = "https://" + "api.xxxx.me" + oSession.PathAndQuery;
    }

答案 1 :(得分:1)

通常,如果您遇到此问题,则意味着Flutter应用程序出于某种原因忽略了系统代理设置,或者它不信任Fiddler的HTTPS证书。

通常可以通过使用该应用程序并检查其日志来区分它们:如果该应用程序运行正常并且日志很好,则可能完全忽略了Fiddler。如果该应用程序无法连接到Internet,尤其是在logcat中存在安全/ TLS /证书警告,则它可能不信任该证书。

如果不信任该代理,则需要在代码中执行此操作,或者使用配置单独的应用来通过充当VPN来强制您进行代理设置。如果证书不受信任,则需要在应用程序的network security settings中进行配置。

Fiddler并不是Android的绝佳选择。使用内置有Android支持的工具,您可能会更好运-我一直在构建它,这是一个名为HTTP Toolkit的开源项目,可以对所有Android应用程序执行此操作,包括使用Flutter构建的任何程序:

enter image description here

一键式设置,无需任何代码更改,它即可为您完成所有VPN代理实施工作,并且它还可以自动处理证书设置(甚至在仿真器和根设备上也包括系统级证书)。那应该消除您遇到这种情况的两种方式。

否则,它与Fiddler非常相似:一个拦截代理,可让您检查和重写您喜欢的任何客户端的HTTPS。

答案 2 :(得分:0)

有没有试过这个,但也许你可以继承HttpClient类,并覆盖你想要跟踪的方法,并在你想要跟踪时使用它?

答案 3 :(得分:0)

我可以使用以下代码片段使Charles Proxy与HttpClient一起使用:

localhost可以是您计算机的IP地址,例如192.168.1.77

HttpClient client = HttpClient();
client.findProxy = (uri) {
  return "PROXY localhost:3128;";
};

更完整的实现:

  static HttpClient getHttpClient() {
    HttpClient client = new HttpClient()
      ..findProxy = (uri) {
        return "PROXY 192.168.1.199:8888;";
      }
      ..badCertificateCallback =
      ((X509Certificate cert, String host, int port) => true);

    return client;
  }

其他HTTP客户端的更多信息和解决方案也可以在这里找到:

https://github.com/flutter/flutter/issues/20376