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
相关产品推荐
相关产品推荐

