You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中使用HttpConnection调用Replicate API遇认证令牌缺失问题求助

问题分析与解决

你的代码存在两个核心问题,导致请求失败:

  1. 请求体格式错误:你把FileBody对象直接塞进JSON里,JSON序列化后会变成无意义的对象引用字符串(比如org.apache.http.entity.mime.content.FileBody@xxxx),完全不符合Replicate API的要求;同时上传文件不能用application/json的Content-Type,必须用multipart/form-data。
  2. 原生HttpURLConnection处理multipart请求过于繁琐:原生API没有封装multipart表单的便捷方法,容易出现格式错误,进而导致服务器无法正确解析认证头,返回"未传认证令牌"的错误。

修正方案

改用Apache HttpClient来构造multipart请求,以下是可直接运行的修正代码:

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

import java.io.File;
import java.io.IOException;

public class ReplicateApiCall {
    public static void main(String[] args) {
        String apiUrl = "https://api.replicate.com/v1/predictions";
        String apiToken = "你的实际API密钥";

        // 构建multipart请求体
        MultipartEntityBuilder builder = MultipartEntityBuilder.create();
        // 添加版本参数
        builder.addTextBody("version", "494ca4d578293b4b93945115601b6a38190519da18467556ca223d219c3af9f9");
        // 添加input里的model参数(Replicate API的嵌套参数需要用input[字段名]格式)
        builder.addTextBody("input[model]", "Image Denoising");
        // 添加文件字段
        File file = new File("C:\\Users\\ruhul\\OneDrive\\ছবিগুলি\\ads.PNG");
        FileBody fileBody = new FileBody(file);
        builder.addPart("input[image]", fileBody);

        HttpEntity multipartEntity = builder.build();

        // 创建HttpClient和POST请求
        HttpClient httpClient = HttpClients.createDefault();
        HttpPost httpPost = new HttpPost(apiUrl);
        // 设置认证头
        httpPost.setHeader("Authorization", "Token " + apiToken);
        httpPost.setEntity(multipartEntity);

        try {
            HttpResponse response = httpClient.execute(httpPost);
            int responseCode = response.getStatusLine().getStatusCode();
            System.out.println("响应码:" + responseCode);

            String responseBody = EntityUtils.toString(response.getEntity());
            System.out.println("响应内容:" + responseBody);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

注意事项

  • 依赖引入:如果用Maven,需要在pom.xml中添加Apache HttpClient的依赖:
<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.14</version>
</dependency>
<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpmime</artifactId>
    <version>4.5.14</version>
</dependency>
  • API密钥验证:确保你的API密钥没有打码错误,密钥可在Replicate账号设置中获取。
  • 参数格式:Replicate API的嵌套参数(比如input里的字段)需要用input[字段名]的格式作为表单字段名,不能直接传嵌套JSON。

内容的提问来源于stack exchange,提问作者RmTomal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 08:25:20