我正在尝试通过 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 处理请求的方式?无论如何,有人知道我该如何解决这个问题吗?
好吧,我明白了(感谢 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();
如果你好奇...