flutter的代理问题

2,215 阅读1分钟

最近写项目因为要要用到谷歌地图,需要用到一个测距的接口。

  1. 首先是在谷歌地图的API中开启我们需要用到的一个  Distance Matrix API
  2. 然后我用的是dio包去请求我们的API 
    import 'package:dio/dio.dart';
    
    Dio dio = new Dio();
    String YOUR_API_KEY = YOUR_API_KEY;        // 这里输入你的api
    var origins = '';    // 初始坐标点
    var destinations = ''   // 结束坐标点
    Response response = await dio.get(
        'https://maps.googleapis.com/maps/api/distancematrix/json?units=imperial&origins=${origins}&destinations=${destinations}&key=${YOUR_API_KEY}'print(response.data)

      之后在模拟器运行一直都是超时 433,打开浏览器是能正常运行的,再者我用真机测试也         是正常的,所以问题就是出在模拟器身上,可能是没有走到代理。

带着问题我打开了代理的log,我用的是ss,所以我的log位置是在Library/Logs里面的ss-local.log,我先是打印100条来看一下


发现好像是真没有走到代理。

解决问题 (http proxy 开启本地的代理,在我们开发的时候开启,生产的时候关闭即可)

(dio.httpClientAdapter as DefaultHttpClientAdapter).onHttpClientCreate = (HttpClient client) {  
    client.findProxy = (uri) {   
         // proxy all request to localhost:8888
        return "PROXY localhost:1087";  
    };  
    client.badCertificateCallback =      
        (X509Certificate cert, String host, int port) => true;
};

这样再次请求,你就发现成功了!也可以用这种方式进行抓包。