Flutter网络代理插件flutter_socks_proxy的使用

发布于 1周前 作者 bupafengyu 来自 Flutter

Flutter网络代理插件flutter_socks_proxy的使用

flutter_socks_proxy 是一个Dart包,支持HTTP、Socks4和Socks5代理。以下是关于如何使用该插件的详细说明和完整示例。

Flutter版本范围

flutter_socks_proxy Flutter
0.0.1 < 3.0
0.0.2 >= 3.0

使用方法

1. 全局使用

在全局范围内设置代理,所有通过 HttpClient 发起的请求都会经过该代理。

import 'dart:convert';
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter_socks_proxy/socks_proxy.dart';

void main() async {
  // 确保Flutter绑定已经初始化
  WidgetsFlutterBinding.ensureInitialized();

  // 初始化全局代理
  // 代理格式: "SOCKS5/SOCKS4/PROXY username:password@host:port;" 或 "DIRECT"
  SocksProxy.initProxy(proxy: 'SOCKS5 192.168.31.180:7891');

  // 测试请求
  await HttpClient()
      .getUrl(Uri.parse('https://raw.githubusercontent.com/tayoji-io/socks_proxy/master/README.md'))
      .then((value) {
        return value.close();
      })
      .then((value) {
        return value.transform(utf8.decoder);
      })
      .then((value) {
        return value.fold('', (previous, element) => previous + element);
      })
      .then((value) => print(value))
      .catchError((e) => print(e));

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Flutter Socks Proxy Demo')),
        body: Center(child: Text('Check the console for the request result.')),
      ),
    );
  }
}
2. 独立使用

在独立的请求中设置代理,仅对该请求生效。

import 'dart:convert';
import 'dart:io';
import 'package:flutter_socks_proxy/socks_proxy.dart';

void request() async {
  // 创建带有代理的HttpClient
  final http = createProxyHttpClient()
    ..findProxy = (url) => 'SOCKS5 192.168.31.180:7891';

  // 发起请求
  await http
      .getUrl(Uri.parse('https://raw.githubusercontent.com/tayoji-io/socks_proxy/master/README.md'))
      .then((value) {
        return value.close();
      })
      .then((value) {
        return value.transform(utf8.decoder);
      })
      .then((value) {
        return value.fold('', (previous, element) => previous + element);
      })
      .then((value) => print(value))
      .catchError((e) => print(e));
}

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  request();
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Flutter Socks Proxy Demo')),
        body: Center(child: Text('Check the console for the request result.')),
      ),
    );
  }
}

更多关于Flutter网络代理插件flutter_socks_proxy的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter网络代理插件flutter_socks_proxy的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用flutter_socks_proxy插件的一个示例代码案例。flutter_socks_proxy是一个Flutter插件,用于配置和管理SOCKS代理。

1. 添加依赖

首先,在你的pubspec.yaml文件中添加flutter_socks_proxy依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_socks_proxy: ^最新版本号  # 请替换为实际可用的最新版本号

然后运行flutter pub get来获取依赖。

2. 配置代理

接下来,你可以在你的Flutter应用中配置和使用SOCKS代理。以下是一个简单的示例,展示如何设置和使用SOCKS代理。

import 'package:flutter/material.dart';
import 'package:flutter_socks_proxy/flutter_socks_proxy.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  final FlutterSocksProxy _socksProxy = FlutterSocksProxy();

  @override
  void initState() {
    super.initState();
    _configureProxy();
  }

  Future<void> _configureProxy() async {
    try {
      // 配置SOCKS代理,替换为实际的代理服务器地址和端口
      String host = 'your.socks.proxy.host';
      int port = 1080; // 常见的SOCKS代理端口
      String username = 'yourUsername'; // 如果需要身份验证
      String password = 'yourPassword'; // 如果需要身份验证

      bool success = await _socksProxy.startSocksProxy(
        host: host,
        port: port,
        username: username,
        password: password,
      );

      if (success) {
        print('SOCKS代理配置成功');
      } else {
        print('SOCKS代理配置失败');
      }
    } catch (e) {
      print('配置SOCKS代理时发生错误: $e');
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter SOCKS Proxy 示例'),
        ),
        body: Center(
          child: Text('代理配置中...'),
        ),
      ),
    );
  }

  @override
  void dispose() {
    // 停止代理
    _socksProxy.stopSocksProxy().then((_) {
      print('SOCKS代理已停止');
    }).catchError((e) {
      print('停止SOCKS代理时发生错误: $e');
    });
    super.dispose();
  }
}

注意事项

  1. 权限:确保你的应用具有访问网络的权限。在Android上,你可能需要在AndroidManifest.xml文件中添加相关权限。
  2. 代理服务器:上面的代码示例中使用了占位符(如your.socks.proxy.host),你需要替换为实际的代理服务器地址和端口。
  3. 身份验证:如果代理服务器需要身份验证,你需要提供用户名和密码。如果不需要,可以将usernamepassword参数设置为null或空字符串。
  4. 错误处理:在实际应用中,你应该添加更多的错误处理逻辑,以处理各种可能的异常情况。

这个示例代码展示了如何在Flutter应用中配置和使用SOCKS代理。根据你的具体需求,你可能需要进一步定制和扩展这个示例。

回到顶部