我刚开始玩Flutter,现在正在尝试做一些简单的HTTP请求。我总是使用Fiddler和代理来调试从android应用程序发送的请求,但是从Flutter发送的请求似乎没有显示。
有什么方法可以让Fiddler显示Flutter请求,还是我可以/应该使用其他一些HTTP请求调试工具/监视器?
答案 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构建的任何程序:
一键式设置,无需任何代码更改,它即可为您完成所有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客户端的更多信息和解决方案也可以在这里找到: