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

Java开发Android应用:如何检测Onion URL是否存活?

嘿,刚好做过类似的需求!因为Onion URL是Tor网络独有的,普通的Java/Android网络库(比如OkHttp、HttpURLConnection)默认没法直接访问,得用支持Tor代理的方案或者专门的Tor相关库。下面给你几个实用的选项:

方案1:OkHttp + Tor本地代理(依赖Orbot)

这是最轻量化的方案,前提是用户设备上已经安装了Orbot(Tor官方的Android客户端),它会在本地提供SOCKS5代理(默认端口9050或9150)。你只需要配置OkHttp通过这个代理访问Onion地址:

// 配置Tor SOCKS代理
Proxy torProxy = new Proxy(Proxy.Type.SOCKS, new InetSocketAddress("127.0.0.1", 9050));
OkHttpClient torClient = new OkHttpClient.Builder()
    .proxy(torProxy)
    .connectTimeout(30, TimeUnit.SECONDS) // Tor连接可能慢,设置合理超时
    .build();

// 用HEAD请求检测存活(比GET更轻量,只获取响应头)
Request checkRequest = new Request.Builder()
    .url("http://your-target.onion")
    .head()
    .build();

try (Response response = torClient.newCall(checkRequest).execute()) {
    boolean isOnionAlive = response.isSuccessful(); // 2xx状态码即为存活
    // 处理检测结果
} catch (IOException e) {
    // 连接失败:可能URL无效、Tor未启动,或者网络问题
    e.printStackTrace();
}

如果用户没装Orbot,你可以引导他们安装,或者用下面的方案自己集成Tor服务。

方案2:自行集成Tor服务到应用

如果不想依赖用户安装第三方APP,可以把Tor的二进制文件和相关库集成到你的Android项目里,比如用第三方封装库tor-android:

  1. 先在项目的build.gradle添加依赖:
implementation 'com.github.miclle:tor-android:0.4.7.10'
  1. 启动Tor服务并配置代理:
TorService torService = new TorService(getApplicationContext());
torService.startTor(new TorService.OnTorStartedListener() {
    @Override
    public void onTorStarted(int socksPort) {
        // Tor启动成功,拿到动态分配的SOCKS端口
        Proxy torProxy = new Proxy(Proxy.Type.SOCKS, new InetSocketAddress("127.0.0.1", socksPort));
        OkHttpClient torClient = new OkHttpClient.Builder()
            .proxy(torProxy)
            .build();
        
        // 这里执行Onion URL的存活检测逻辑(和方案1一致)
    }

    @Override
    public void onTorStartFailed(Exception e) {
        // Tor启动失败,比如权限不足、资源不够,需要处理错误
        e.printStackTrace();
    }
});

这个方案的好处是无需用户额外操作,但要注意:

  • Tor第一次启动可能需要1-2分钟建立节点连接,要给用户加载提示
  • 需在AndroidManifest.xml添加必要权限:
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!-- 存储Tor节点数据 -->
    
关键注意事项
  • 优先用HEAD请求:检测存活不需要获取完整页面内容,HEAD请求只返回响应头,更节省带宽和时间
  • 超时设置:Tor网络连接通常比普通网络慢,建议把连接超时设置为30秒以上
  • 重试机制:如果第一次请求失败,可以重试1-2次,排除临时节点堵塞的情况

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:30:20