Пример OKhttp PUT
Мое требование - использовать PUT
, отправить заголовок и тело на сервер, который будет что-то обновлять в базе данных.
Я просто прочитал okHttp-документацию, и я пытался использовать их пример 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);
}
Я попытался найти пример okHttp с помощью PUT
без успеха, если мне нужно использовать метод PUT
, есть ли способ использовать okHttp?
Я использую okhttp: 2.4.0 (на всякий случай), спасибо за любую помощь!
Ответы
Ответ 1
Измените .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);
}
Ответ 2
Используйте put
вместо post
Request request = new Request.Builder()
.url(url)
.put(body) // here we use put
.addHeader("Authorization", header)
.build();
Ответ 3
OkHttp Version 2.x
Если вы используете OkHttp Version 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 Version 3.x
Как OkHttp версии 3 заменили FormEncodingBuilder
на FormBody
и FormBody.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();
}