使用KubeJS发送HTTP请求
教程-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)
正在加载内容…
回复帖子善语结善缘,恶语伤人心。要记得文明发言哦!
登录后参与讨论登录账号后即可发表您的回复和看法
