跳转到内容
logo
我的世界XyeBBS论坛3群 进群吹水聊天!众多整合包作者、插件作者、玩家在内哦!不定时发福利,公布重要通知!

使用KubeJS发送HTTP请求

icon教程-KubeJS教程浏览 2359回复 2
发布于 2025-07-20 22:29:50

你是否在苦恼KubeJS本身无法发送HTTP?是不是想在服务器中使用HTTP中的数据?它来了,KubeHTTP! 注意:请求HTTP时会阻塞服务器主线程,请谨慎使用!目前暂无更好解决办法!

本代码使用了 [1.19/1.20简易黑魔法]如何解除ClassFilter自由使用Java.loadClass,本代码只在1.20.1测试过。

//options{method:"GET"||"POST"||"PUT",json:object} return:{ body:string,headers:object,json:Function }
global.unlockClassFilter(Java) //解锁
const HttpGet = Java.loadClass('org.apache.http.client.methods.HttpGet')
const HttpPut = Java.loadClass('org.apache.http.client.methods.HttpPut')
const HttpPost = Java.loadClass('org.apache.http.client.methods.HttpPost')
const HttpClients = Java.loadClass('org.apache.http.impl.client.HttpClients')
const EntityUtils = Java.loadClass('org.apache.http.util.EntityUtils')
const StringEntity = Java.loadClass('org.apache.http.entity.StringEntity')
function Kubehttp(url,options){ //Why not i am do not use HttpClient And URLConnection,because fuck the rhino and java9+
 let httpmethod = null
 switch(options.method){
  case 'GET':
   httpmethod = new HttpGet(url)
   break
  case 'POST':
   httpmethod = new HttpPost(url)
   break;
  case 'PUT':
   httpmethod = new HttpPut(url)
   break;
  default:
   httpmethod = new HttpGet(url)
   break;
 }
 if(httpmethod){
 if(options.headers){
  var key = Object.keys(options.headers)
  for(let i = 0;i<key.length;i++){
   httpmethod.setHeader(key[i],options.headers[key[i]])
  }
 }else{
  httpmethod.setHeader('User-Agent',`KubeHTTPClient/${ Platform.getMinecraftVersion() }`)
 }
 if(options.json){
  if(httpmethod.setEntity){
    var entity = new StringEntity(JSON.stringify(options.json||{}),"UTF-8")
    entity.setContentType("application/json")
    httpmethod.setEntity(entity)
  }else{
    throw Error('GET can not set body!')
  }
 }
 var httpclient = HttpClients.createDefault()
 var response = httpclient.execute(httpmethod)
 var entity = response.getEntity()
 var content = EntityUtils.toString(entity, 'UTF-8')
 var json = ()=>{
  try{
   return JSON.parse(content)
  }catch(e){
   throw Error(`Response is not a json`)
  }
 }
 return {body:content,headers:response.getAllHeaders(),json:json}
}
}

function chalk(mcolor, message) {
  const color = {
      reset: '\x1b[0m', //重置颜色
      red: '\x1b[31m', //错误
      green: '\x1b[32m', //日志
      yellow: '\x1b[33m' //警告
  }
  if(Object.keys(color).includes(mcolor)){
      return (color[mcolor] + message + color.reset)
  }else{
      return message
  }
}
帖子打赏
参与人数打赏物品(0)

正在加载内容…
#597/21/2025, 10:33:19 AM

我印象中1.20.1不需要破坏ClassFilter就可以发送http请求,因为 kjs并没有封禁apache里的一个http的工具类,用那个就可以发http请求,而不需要用原生java的方式去发http请求,反而麻烦了

楼中楼加载中
回复帖子善语结善缘,恶语伤人心。要记得文明发言哦!
登录后参与讨论登录账号后即可发表您的回复和看法