Мы используем okhttp в нашем проекте для отправки почтового запроса на наше устройство IoT.Этот код работает для каждого устройства, которое у нас есть / test , за исключением для Google Pixel 2, по какой-то причине каждый раз происходит сбой.
Наш разработчик прошивки, кажется, думает, что телефон говорит«Я отправляю вам контент длиной 1100», но на самом деле отправляет только 1000 байтов.
Странно, что когда полезная нагрузка меньше, она работает, но когда она достигает определенной длины,перестает работать, опять же только на этом конкретном телефоне.
String json = ServiceGenerator.gson.toJson(registerRequest);
byte[] bytes = json.getBytes(Util.UTF_8);
RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), bytes);
Request request = new Request.Builder()
.url(PROVISION_HOST + "/v2/prov/registration")
.post(requestBody)
.addHeader("Timestamp", timestamp)
.addHeader("Auth-Hash", authHash)
.build();
OkHttpClient client = new OkHttpClient();
client.newCall(request).enqueue(new okhttp3.Callback() {
@Override
public void onFailure(okhttp3.Call call, IOException e) {
Log.e("REGISTRATION RESPONSE", call.toString());
}
@Override
public void onResponse(okhttp3.Call call, okhttp3.Response response) throws IOException {
Log.e("REGISTRATION RESPONSE", response.body().toString());
nextStep();
}
});
registerRequest
это просто строка JSON.Согласно запросу, заголовок Content-Length
соответствует фактической длине bytes
.
Мы перепробовали так много вещей, и с трудом понимаем, что мы можем сделать, чтобы это исправить.Есть ли что-то, что мы делаем не так или это имеет смысл?