OkHttp POST не похоже, чтобы отправить тело запроса

Я пытаюсь использовать RetroFit2 а также OkHttp3 сделать метод POST на PHP-скрипте. Я прекрасно делал методы GET, но у меня были проблемы с публикацией.

у меня есть HttpLoggingInterceptor настроить с моим OkHttpClientи он отлично регистрирует тело запроса. Но мой PHP-скрипт не получал данные, поэтому я попытался просто вывести $_POST данные, как только я получил его, но это пустая строка. Я не могу сказать, если что-то не так на стороне Android, на стороне сервера, или и то, и другое.

мой RetroFit объект и OkHttpClient настроены так:

HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);

OkHttpClient client = new OkHttpClient.Builder()
.cookieJar(RestCookieJar.getInstance())
.addInterceptor(interceptor)
.build();

Gson gson = new GsonBuilder()
.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
.registerTypeAdapter(Instant.class, new InstantAdapter())
.registerTypeAdapter(LatLng.class, new LatLngAdapter())
.registerTypeAdapter(Uri.class, new UriAdapter())
.create();

Retrofit retrofit = new Retrofit.Builder()
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create(gson))
.client(client)
.baseUrl(BASE_URL)
.build();

RestService service = retrofit.create(RestService.class);

Тогда мой RestService Интерфейс настроен так:

public interface RestService {

@GET("api/index.php")
Call<List<Session>> getSessions();

@POST("api/index.php")
Call<ResponseBody> postSession(@Body Session session);
}

Как я уже говорил, это все кажется работать, но когда я звоню:

<?php

if($_SERVER['REQUEST_METHOD'] === 'POST') {
print_r($_POST);
}

Я получаю пустой набор скобок.

2

Решение

Я нашел свой ответ здесь: При отправке формы массив php $ _POST пуст. Дооснащение автоматически устанавливает Content-Type в "application/json; charset=UTF-8", который в PHP версии 5.0 — 5.19, есть ошибка в результате чего тело запроса не будет проанализировано в $_POST переменная. Сервер, который я использую, работает под управлением PHP 5.10 (который я не могу контролировать).

Обходной путь для этой ошибки — самостоятельно проанализировать данные JSON из необработанного тела запроса:

if($_SERVER['CONTENT_TYPE'] === 'application/json; charset=UTF-8') {
$_POST = json_decode(file_get_contents('php://input'));
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]