OkHttpUtil.java 1.7 KB
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() : "";
        }
    }
}