我生活在受限制的国家/地区,Firebase 等服务需要使用 VPN。 所以我正在创建使用 Firebase 作为后端的 flutter 应用程序,我想知道我可以将代理设置为应用程序中的整个连接以进行 GET 和 POST 等请求吗?
http_proxy=http://server_ip:port https_proxy=http://server_ip:port
pub_specs.yaml
http_代理:^1.1.0
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; ...
你还没有说适用于什么平台,但至少对于类似 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.
我能够使用这个包来解决这个问题: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());
}