在 Flutter 中使用 Http 代理

问题描述 投票:0回答:3

我生活在受限制的国家/地区,Firebase 等服务需要使用 VPN。 所以我正在创建使用 Firebase 作为后端的 flutter 应用程序,我想知道我可以将代理设置为应用程序中的整个连接以进行 GET 和 POST 等请求吗?

flutter http
3个回答
4
投票
  1. 对于 Windows 通过在环境变量(系统属性)中设置
http_proxy=http://server_ip:port

https_proxy=http://server_ip:port
  1. pub_specs.yaml

    http_代理:^1.1.0

  2. main.dart

import 'package:http_proxy/http_proxy.dart';
import 'package:flutter/foundation.dart';

...


void main() async {

  ...

  WidgetsFlutterBinding.ensureInitialized();
  HttpProxy httpProxy = await HttpProxy.createHttpProxy();
  httpProxy.host = "server_ip";// replace with your server ip
  httpProxy.port = "port";// replace with your server port
  HttpOverrides.global=httpProxy;

  ...

3
投票

你还没有说适用于什么平台,但至少对于类似 Unix 的东西,大多数应用程序和库都尊重

http_proxy
环境变量,你可以在大多数 shell 中设置它,例如:

$ export http_proxy=http://server-ip:port/
$ export http_proxy=http://127.0.0.1:3128/
$ export http_proxy=http://proxy-server.mycorp.com:3128/
$ export http_proxy=http://foo:bar@server-ip:port/
$ export http_proxy=http://foo:[email protected]:3128/
$ export http_proxy=http://USERNAME:[email protected]:3128/

正确的字符串将特定于您的环境。有关环境变量解释的详细信息位于:https://api.flutter.dev/flutter/dart-io/HttpClient/findProxyFromEnvironment.html.


2
投票

我能够使用这个包来解决这个问题:https://github.com/kaivean/system_proxy。具体来说,这允许您检索系统级代理信息,然后将其应用到您的 HTTP 客户端。

自述文件中的指南非常有用。这个答案的其余部分只是取自:

导入

import 'package:system_proxy/system_proxy.dart';

代码

// the proxy value likes:  {port: 8899, host: 127.0.0.1}
Map<String, String>? proxy = await SystemProxy.getProxySettings();
if (proxy != null) {
    print('proxy $proxy');
}

为HttpClient设置代理

class ProxiedHttpOverrides extends HttpOverrides {
  ProxiedHttpOverrides(this._host, this._port);

  String _port;
  String _host;

  @override
  HttpClient createHttpClient(SecurityContext? context) {
    return super.createHttpClient(context)
      // set proxy
      ..findProxy = (uri) {
        return _host != null ? "PROXY $_host:$_port;" : 'DIRECT';
      };
  }
}

void main() async {
  Map<String, String>? proxy = await SystemProxy.getProxySettings();
  if (proxy == null) {
    proxy = {
    'host': null,
    'port': null
    };
  }
  HttpOverrides.global = new ProxiedHttpOverrides(proxy['host'], proxy['port']);
  runApp(MyApp());
}
© www.soinside.com 2019 - 2024. All rights reserved.