如何将 curl 映射到 java okhttp?

How to map curl into java okhttp?

我有如下基本卷曲:

curl -X POST \
    'https://aogt.pl/auth/' \
    -H 'Authorization: Basic NGZjMjExNWQyYTZk' \
    -H 'Content-Type: application/x-www-form-urlencoded' \
    -d 'client_id=4fc2115'

当我在控制台上 运行 它时Ubuntu 一切正常,我得到了很好的回应。现在我想使用 okhttp 将这个 curl 映射到 java 代码中。我写下面的代码:

public class TestMain {
    private static final MediaType JSON = MediaType.parse("application/json; charset=utf-8");
    public static void main(String[] args) throws IOException {
        String data = "client_id=4fc2115";
        RequestBody body = RequestBody.create(JSON, data);
        Request request = new Request.Builder()
                .url("https://aogt.pl/auth/")
                .addHeader("Authorization", "Basic NGZjMjExNWQyYTZk")
                .addHeader("Content-Type", "application/x-www-form-urlencoded")
                .post(body)
                .build();
        OkHttpClient client = new OkHttpClient();
        Response response = client.newCall(request).execute();
        System.out.println(response.body().string());
    }
}

pom 文件如下所示:

<dependencies>
   <dependency>
      <groupId>com.squareup.okhttp3</groupId>
         <artifactId>okhttp</artifactId>
      <version>4.2.0</version>
   </dependency>
</dependencies>

问题是,当我 运行 此代码时,我得到“400 Bad Request”,所以这是服务器的问题。我把上面curl map 错误成java 代码变成了http。可能问题出在POST body,因为它不是JSON,但我需要在这里改变什么,你能告诉我哪里出了问题吗?非常感谢。

您要发送的请求有 content-type 作为 "application/x-www-form-urlencoded"。 因此,将 body 创建为 JSON 是行不通的。 您应该尝试按以下方式组成 body:

RequestBody body = new FormBody.Builder().add("client_id", "id_value").build();