OKhttp PUT 示例

OKhttp PUT example

我的要求是使用 PUT,向服务器发送一个 header 和一个 body,这将更新数据库中的内容。

我刚刚阅读了 okHttp documentation 并尝试使用他们的 POST 示例,但它不适用于我的用例 (我认为这可能是因为服务器要求我使用 PUT 而不是 POST).

这是我使用 POST 的方法:

 public void postRequestWithHeaderAndBody(String url, String header, String jsonBody) {


        MediaType JSON = MediaType.parse("application/json; charset=utf-8");
        RequestBody body = RequestBody.create(JSON, jsonBody);

        OkHttpClient client = new OkHttpClient();

        Request request = new Request.Builder()
                .url(url)
                .post(body)
                .addHeader("Authorization", header)
                .build();

        makeCall(client, request);
    }

我已经尝试使用 PUT 搜索 okHttp 示例,但没有成功,如果我需要使用 PUT 方法,是否可以使用 okHttp?

我正在使用 okhttp:2.4.0(以防万一),感谢您的帮助!

使用put method instead of post

Request request = new Request.Builder()
            .url(url)
            .put(body) // here we use put
            .addHeader("Authorization", header)
            .build();

将您的 .post 更改为 .put

public void putRequestWithHeaderAndBody(String url, String header, String jsonBody) {


        MediaType JSON = MediaType.parse("application/json; charset=utf-8");
        RequestBody body = RequestBody.create(JSON, jsonBody);

        OkHttpClient client = new OkHttpClient();

        Request request = new Request.Builder()
                .url(url)
                .put(body) //PUT
                .addHeader("Authorization", header)
                .build();

        makeCall(client, request);
    }

OkHttp 版本2.x

如果您使用的是 OkHttp 版本 2.x,请使用以下内容:

OkHttpClient client = new OkHttpClient();

RequestBody formBody = new FormEncodingBuilder()
        .add("Key", "Value")
        .build();

Request request = new Request.Builder()
    .url("http://www.foo.bar/index.php")
    .put(formBody)  // Use PUT on this line.
    .build();

Response response = client.newCall(request).execute();

if (!response.isSuccessful()) {
    throw new IOException("Unexpected response code: " + response);
}

System.out.println(response.body().string());

OkHttp 版本3.x

由于 OkHttp 版本 3 将 FormEncodingBuilder 替换为 FormBodyFormBody.Builder(),对于版本 3.x,您必须执行以下操作:

OkHttpClient client = new OkHttpClient();

RequestBody formBody = new FormBody.Builder()
        .add("message", "Your message")
        .build();

Request request = new Request.Builder()
        .url("http://www.foo.bar/index.php")
        .put(formBody) // PUT here.
        .build();

try {
    Response response = client.newCall(request).execute();

    // Do something with the response.
} catch (IOException e) {
    e.printStackTrace();
}