OKhttp PUT 示例

Posted

技术标签:

【中文标题】OKhttp PUT 示例【英文标题】:OKhttp PUT example 【发布时间】:2016-04-25 11:31:25 【问题描述】:

我的要求是使用PUT,将标头和正文发送到服务器,这将更新数据库中的某些内容。

我刚刚阅读了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示例,但没有成功,如果我需要使用PUTmethod,是否有使用okHttp的方法?

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

【问题讨论】:

【参考方案1】:

使用put 方法代替post

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

【讨论】:

【参考方案2】:

将您的.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发送put请求?【参考方案3】:

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();

【讨论】:

以上是关于OKhttp PUT 示例的主要内容,如果未能解决你的问题,请参考以下文章

java Android Glide + okhttp进度示例

Okhttp常用方法示例

Okhttp Put 方法返回“不允许的方法”

在 Servlet 中获取 OkHttp PUT 请求参数

使用 OkHttp java 进行远程服务器可用性检查

从 OKHTTP 下载二进制文件