package com.xly.util; import okhttp3.*; import java.io.IOException; import java.util.concurrent.TimeUnit; /** * OkHttp 薄封装:目前仅 {@code LlmJsonClient} 用它同步 POST JSON。 */ public class OkHttpUtil { private final OkHttpClient client; private OkHttpUtil(long connectTimeout, long readTimeout, long writeTimeout) { client = new OkHttpClient.Builder() .connectTimeout(connectTimeout, TimeUnit.SECONDS) .readTimeout(readTimeout, TimeUnit.SECONDS) .writeTimeout(writeTimeout, TimeUnit.SECONDS) .build(); } public static OkHttpUtil getInstance(long connectTimeout, long readTimeout, long writeTimeout) { return new OkHttpUtil(connectTimeout, readTimeout, writeTimeout); } /** POST JSON,带 Bearer 鉴权(OpenAI 兼容端点;Ollama 忽略该头,云端网关需要真实 key)。 */ public String postJson(String url, String bearerToken, String json) throws IOException { RequestBody body = RequestBody.create(json, MediaType.parse("application/json; charset=utf-8")); Request.Builder reqBuilder = new Request.Builder().url(url).post(body); if (bearerToken != null && !bearerToken.isBlank()) { reqBuilder.header("Authorization", "Bearer " + bearerToken); } Request request = reqBuilder.build(); try (Response response = client.newCall(request).execute()) { if (!response.isSuccessful()) { throw new IOException("Unexpected code: " + response.code() + ", message: " + response.message()); } ResponseBody rb = response.body(); return rb != null ? rb.string() : ""; } } }