如何将curlMap到java okhttp?

w8ntj3qf  于 2022-11-13  发布在  Java
关注(0)|答案(2)|浏览(164)

我有一个基本的 curl 如下:

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把这个curlMap到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错误请求”,所以这是服务器的问题。我错误地将上面的curlMap到了java代码中,Map到了http中。可能问题出在POST主体中,因为它不是JSON,而是我需要在这里修改的内容,你能告诉我哪里出了问题吗?非常感谢。

tct7dpnv

tct7dpnv1#

您要发送的请求的内容类型为“application/x-www-form-urlencoded”。因此,无法将正文创建为JSON。您应尝试按以下方式创建正文:
请求体body =新建表单体.Builder().add(“客户标识”,“标识值”).build();

6pp0gazn

6pp0gazn2#

RequestBody body = new FormBody.Builder() .add("client_id", "id_value");嗨,希望你已经解决了这个问题。实际上,如果你想用'form-body'而不是'json'发送请求,你可以很容易地使用这个类:'FormBody'。它继承了RequestBody。

相关问题