美文网首页Flutter
Flutter:Dio抓包配置

Flutter:Dio抓包配置

作者: 爱抖腿的飞飞 | 来源:发表于2021-11-13 17:00 被阅读0次

学习Flutter的一个月了,说好了写博客,才写完一篇就断更了,很尴尬。

Dio目前应该是Flutter最火的网络请求框架了,今天不分享网络请求实现,分享一下抓包。

抓包可以用Fiddler或者Charles,我当前的IP和Port为:192.168.0.85:8888
在手机的WIFI->代理->手动配置主机名和端口号。

按照Dio文档配置如下:

import 'package:dio/dio.dart';
import 'package:dio/adapter.dart';
...
(dio.httpClientAdapter as DefaultHttpClientAdapter).onHttpClientCreate = (client) {
  // config the http client
  client.findProxy = (uri) {
    //proxy all request to localhost:8888
    return 'PROXY localhost:8888';
  };
  // you can also create a HttpClient to dio
  // return HttpClient();
};

在实际抓包的时候发现,以上代码好像不生效,那是因为Flutter Dev Tools本身通过Socket与手机连接,解决方法如下:

  • 方法1. 将localhost改为具体的IP,例如192.168.0.85,所以代码如下

        import 'package:dio/dio.dart';
        import 'package:dio/adapter.dart';
        ...
        (dio.httpClientAdapter as DefaultHttpClientAdapter).onHttpClientCreate = (client) {
          // config the http client
          client.findProxy = (uri) {
            //proxy all request to localhost:8888
            return 'PROXY 192.168.0.85:8888';
          };
          // you can also create a HttpClient to dio
          // return HttpClient();
        };
        ```
        这种方式个人开发还行,如果是团队开发或者线下测试就不太友好了。
    
    
  • 方法2. 配置设备监听的端口号,需要使用adb reverse tcp:8888 tcp:8888命令。

    这样配置有一个坏处就是adb重启就需要重新输入命令,对于没有安装adb工具的还是不友好。

  • 方法3. 结合方法1,动态配置代理。在Dio初始化之前,通过MethodChannel调用Android\IOS获取代理信息,动态配置Dio
    flutter端代码如下:

    Dio dio = Dio();
    MethodChannel channel = const MethodChannel('com.muzi.http.proxy');
    Future<String?> getHost = channel.invokeMethod('getProxyHost');
    Future<String?> getPort = channel.invokeMethod('getProxyPort');
    var result = await Future.wait([getHost, getPort]);
    if (result.length == 2 &&
        result[0] != null &&
        result[0]!.isNotEmpty &&
        result[1] != null &&
        result[1]!.isNotEmpty) {
      String host = result[0].toString();
      String port = result[1].toString();
      (dio.httpClientAdapter as DefaultHttpClientAdapter).onHttpClientCreate =
          (HttpClient client) {
        client.findProxy = (uri) {
          return 'PROXY $host:$port';
        };
      };
    }

android端代码如下:

        class HttpProxyPlugin(messenger: BinaryMessenger): MethodChannel.MethodCallHandler {

            private var channel: MethodChannel? = null

            init {
                channel = MethodChannel(messenger, "com.muzi.http.proxy")
                channel?.setMethodCallHandler(this)
            }

            override fun onMethodCall(call: MethodCall, result: MethodChannel.Result) {
                when (call.method) {
                    "getProxyHost" -> result.success(getProxyHost())
                    "getProxyPort" -> result.success(getProxyPort())
                }
            }

            private fun getProxyHost(): String? {
                return System.getProperty("http.proxyHost")
            }

            private fun getProxyPort(): String? {
                return System.getProperty("http.proxyPort")
            }
        }

IOS端不会,找个人会的同学干吧。。。

示例代码见GitHub

相关文章

  • Flutter:Dio抓包配置

    学习Flutter的一个月了,说好了写博客,才写完一篇就断更了,很尴尬。 Dio目前应该是Flutter最火的网络...

  • 抓包工具proxyman无敌

    flutter抓包(dio设置代理) iOS抓包(atlantis自动代理)都行 能直接tools -> map ...

  • Flutter中Dio如何抓取Https

    前言:之前写了一篇《Flutter中Dio灵活设置抓包代理主机IP和端口》[https://www.jianshu...

  • Flutter Dio Charles抓包设置

    正常抓是不走代理的,需要给dio对象配置代理: localhost mac电脑可以用ifconfig命令看,或者直...

  • Dio 抓包

    dio 默认是不支持 poxyman 等抓包工具抓包的,但是 Dio 提供的 DefaultHttpClientA...

  • Flutter 组件抓包问题

    问题详情: flutter 组件未进行特殊设置的情况下不会走代理,无法被抓包; 解决方案: (1)在 dio 网络...

  • flutter抓包

    前言 老项目集成flutter以后,flutter页面网络请求使用的dio框架,发现charles无法抓取请求包 ...

  • Flutter 之 dio 请求HTTP

    简单说明flutter使用Dio包发送请求 1.添加依赖 2.导入dio 3.设置options 4.发送请求 注...

  • dio 设置代理, 从而实现通过 Charles 等抓包工具来抓

    Dio代理设置 在正常情况下, 抓包工具是无法直接抓取 Flutter 应用的网络通信的, 如果需要在开发的时候抓...

  • Flutter 常用第三方库

    搜索地址 :https://pub.dev/flutter/packages 网络 dio 网络请求 dio: ^...

网友评论

    本文标题:Flutter:Dio抓包配置

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