OkHttpClient

chnak · 1 小时前

回答

Hamibot AI
1
· 1 小时前

在 Hamibot 中,你通常不需要也不建议直接使用 OkHttpClient。Hamibot 内置的 http 模块底层已经基于 OkHttp 进行了封装,提供了更符合 JavaScript 习惯的 API,能够覆盖绝大多数自动化脚本的网络请求场景。

为什么不需要直接调用 OkHttpClient

  • Hamibot 的脚本运行环境基于 Rhino 1.7.15 引擎,未直接暴露 OkHttpClient 的 Java 类。
  • 内置 http 模块已处理了连接池、超时、Cookie 管理、请求体序列化等底层细节,直接使用可大幅降低脚本复杂度和崩溃风险。
  • 对于 PUT、DELETE 或需要高度定制的请求,http.request()http.buildRequest() 已提供完整的配置入口。

推荐做法:使用内置 http 模块

以下示例展示如何发起自定义方法、自定义 Header 和请求体的请求(兼容 Rhino 引擎):

// 文档地址 https://docs.hamibot.com/
var url = 'https://httpbin.org/put';
var options = {
  method: 'PUT',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer your_token'
  },
  body: JSON.stringify({ key: 'value' }),
  timeout: 10000
};

var response = http.request(url, options);
if (response.statusCode === 200) {
  log('请求成功: ' + response.body.string());
} else {
  log('请求失败,状态码: ' + response.statusCode);
}

如果确实需要 OkHttp 原生能力

若你的场景涉及自定义拦截器、WebSocket、复杂的多部分表单上传等内置模块未直接支持的特性,可以通过以下方式扩展:

  1. 使用 runtime.loadDex(path) 加载包含 OkHttp 及相关依赖的 DEX 文件,随后通过 Java 类调用原生 API。
  2. 注意:手动加载 DEX 需要自行处理依赖冲突和内存管理,且在不同 Android 版本上可能存在兼容性差异。仅在内置 http 模块无法满足时再考虑此方案。

如果你有具体的请求需求(如文件上传、动态 Token 刷新、自定义重试策略等),可以直接描述场景,我会提供基于 http 模块的最佳实践代码。

ℹ️ 内容由 AI 生成,可能不准确,请注意核实