You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中如何通过Tor服务调用.onion地址的REST API请求?

在Flutter中连接Tor隐藏服务(.onion地址)实现GET/POST请求

核心思路

让HTTP请求通过Tor的SOCKS5代理转发,同时确保应用内可启动Tor服务(或依赖外部Tor进程),以下是具体实现方案:


1. 配置HTTP客户端通过Tor SOCKS代理发送请求

使用http库配合socks5_proxy_adapter适配器,让所有请求走Tor代理:

  • 先添加依赖到pubspec.yaml:
    dependencies:
      http: ^1.1.0
      socks5_proxy_adapter: ^1.0.0
    
  • 示例代码:
    import 'package:http/http.dart' as http;
    import 'package:socks5_proxy_adapter/socks5_proxy_adapter.dart';
    
    Future<void> sendTorRequest() async {
      // 配置Tor SOCKS5代理(默认本地Tor服务端口9050,Tor浏览器则用9150)
      final proxyAdapter = Socks5ProxyAdapter(
        proxyHost: '127.0.0.1',
        proxyPort: 9050,
      );
    
      // 初始化带代理的HTTP客户端
      final client = http.Client();
      client.httpClientAdapter = proxyAdapter;
    
      // 发送GET请求
      try {
        final getResponse = await client.get(Uri.parse('http://your-onion-api.onion/api/get-data'));
        if (getResponse.statusCode == 200) {
          print('GET响应内容: ${getResponse.body}');
        } else {
          print('GET请求失败,状态码: ${getResponse.statusCode}');
        }
      } catch (e) {
        print('GET请求异常: $e');
      }
    
      // 发送POST请求
      try {
        final postResponse = await client.post(
          Uri.parse('http://your-onion-api.onion/api/post-data'),
          body: {'username': 'test', 'content': 'hello tor'},
        );
        print('POST响应状态码: ${postResponse.statusCode}');
      } catch (e) {
        print('POST请求异常: $e');
      }
    
      // 关闭客户端
      client.close();
    }
    

2. 在Flutter应用内集成Tor服务(无需依赖外部Tor安装)

使用tor_flutter库在移动端启动本地Tor进程:

  • 添加依赖到pubspec.yaml:
    dependencies:
      tor_flutter: ^0.3.0
    
  • 初始化并启动Tor:
    import 'package:tor_flutter/tor_flutter.dart';
    
    Future<void> initTorService() async {
      await TorFlutter.initialize();
      // 启动Tor服务
      await TorFlutter.startTor();
      // 验证Tor是否运行
      final isTorRunning = await TorFlutter.isTorRunning();
      if (isTorRunning) {
        print('Tor服务已成功启动,代理地址:127.0.0.1:9050');
        // 启动成功后再调用sendTorRequest()发送请求
        await sendTorRequest();
      } else {
        print('Tor服务启动失败');
      }
    }
    

3. 平台权限配置

  • Android:在AndroidManifest.xml中添加网络权限
    <uses-permission android:name="android.permission.INTERNET"/>
    
  • iOS:在Info.plist中关闭ATS限制(.onion地址无HTTPS证书)
    <key>NSAppTransportSecurity</key>
    <dict>
      <key>NSAllowsArbitraryLoads</key>
      <true/>
    </dict>
    

内容的提问来源于stack exchange,提问作者Aakash Ghimire

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 05:33:01