feat: HttpUtils共享类,注入为http变量,PAR和mediabo两边统一API

This commit is contained in:
mediabot-pt
2026-07-01 23:13:37 +08:00
parent ed0588d219
commit ad9cfad5d9
2 changed files with 56 additions and 0 deletions

View File

@@ -71,6 +71,7 @@ public class GroovyScriptEngine {
binding.setVariable("jsoup", new JsoupHelper());
binding.setVariable("json", objectMapper);
binding.setVariable("utils", new ScriptUtils());
binding.setVariable("http", new HttpUtils());
GroovyShell shell = new GroovyShell(classLoader, binding);
String fullScript = SCRIPT_PREFIX + groovyScript + "\n// PAR 调用入口\nreturn parse(content, url)";

View File

@@ -0,0 +1,55 @@
package com.par.core.adapter;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;
/**
* HTTP 工具类,注入到 Groovy 脚本中(变量名 http)。
* 提供 get/post 两个方法,PAR 和 mediabot 各注入自己的实现。
* 脚本中使用:http.get(url, cookie) / http.post(url, body, auth)
*/
public class HttpUtils {
private static final HttpClient client = HttpClient.newBuilder()
.connectTimeout(Duration.ofSeconds(10))
.followRedirects(HttpClient.Redirect.NORMAL)
.build();
/** GET 请求 */
public String get(String url, String cookie) {
try {
var builder = HttpRequest.newBuilder()
.uri(URI.create(url))
.timeout(Duration.ofSeconds(15))
.header("User-Agent", "PAR/1.0")
.GET();
if (cookie != null && !cookie.isBlank()) builder.header("Cookie", cookie);
return client.send(builder.build(), HttpResponse.BodyHandlers.ofString()).body();
} catch (Exception e) {
throw new RuntimeException("HTTP GET failed: " + url, e);
}
}
/** POST JSON 请求 */
public String post(String url, String body, String auth) {
try {
var builder = HttpRequest.newBuilder()
.uri(URI.create(url))
.timeout(Duration.ofSeconds(15))
.header("User-Agent", "PAR/1.0")
.header("Content-Type", "application/json");
if (auth != null && !auth.isBlank()) {
if (auth.startsWith("Bearer") || auth.toLowerCase().startsWith("x-api-key"))
builder.header("Authorization", auth);
else builder.header("Cookie", auth);
}
builder.POST(HttpRequest.BodyPublishers.ofString(body != null ? body : ""));
return client.send(builder.build(), HttpResponse.BodyHandlers.ofString()).body();
} catch (Exception e) {
throw new RuntimeException("HTTP POST failed: " + url, e);
}
}
}