OkHttp POST 向 Pocketbase 发送无效格式

问题描述 投票:0回答:1

我正在尝试通过 OkHttp 向本地 Pocketbase 服务器发送

POST
请求,但它不起作用。

在 Pocketbase 中,我有一个名为

servers
的集合。我有一个名为
guild_id
的字段,它设置为
Number
类型。目前,该访问权限仅限管理员。我正在使用 OkHttp 和 Java 来尝试添加新记录。这是代码:

OkHttpClient client = new OkHttpClient();
final String url = "http://localhost:8090/api/collections/servers/records";
final long serverId = 123L;
final String token = System.getenv("token");

RequestBody body = new FormBody.Builder()
        .add("guild_id", String.valueOf(serverId))
        .build();

Request r = new Request.Builder()
        .url(url)
        .addHeader("Authorization", "Bearer " + token)
        .addHeader("Content-Type", "multipart/form-data")
        .post(body)
        .build();

try (Response resp = client.newCall(r).execute()) {
    if (!resp.isSuccessful()) {
        System.err.println("Error posting to pocketbase: " + resp.body().string());
    } else {
        System.out.println("Request successful. Response: " + resp.body().string());
    }
} catch (Exception e) {
    e.printStackTrace();
}

当我运行此代码时,它总是给出相同的错误:

Error posting to pocketbase: {"code":400,"message":"Failed to load the submitted data due to invalid formatting.","data":{}}

我尝试通过邮递员发送相同的请求,并且它成功了。我真的不确定发生了什么,我怀疑这可能是 Java 和/或 OkHttp 处理请求的方式?无论如何,有人知道我该如何解决这个问题吗?

java http okhttp pocketbase
1个回答
0
投票

好吧,我明白了(感谢 Thomas W 的评论)。感谢 Wireshark,我发现 OkHttp 正在发送

application/json
内容类型而不是
multipart/form-data

为了解决这个问题,我使用

MultipartBody.Builder
而不是
FormBody.Builder
并指定了如下类型:

RequestBody body = new MultipartBody.Builder()
        .setType(MultipartBody.FORM)
        .addFormDataPart("guild_id", String.valueOf(serverId))
        .build();

如果你好奇...

这是 OkHttp 的旧请求:

与邮差的对比:

© www.soinside.com 2019 - 2024. All rights reserved.