Эквивалент setEntity в OkHttp – Android

Я перехожу с устаревшего клиента Apache HTTP на OkHttp, и у меня возникают проблемы с поиском эквивалентности между ними. Пару дней назад спрашивал про учетные данные в этой же теме и вот опять застрял:

В старой реализации у меня так:

TimeStampRequestGenerator reqGen = new TimeStampRequestGenerator();
reqGen.setCertReq(true);

MessageDigest digest = MessageDigest.getInstance("SHA256");
digest.update(myData);

TimeStampRequest request = reqGen.generate(TSPAlgorithms.SHA256, digest.digest(), BigInteger.valueOf(100));

byte[] enc_req = request.getEncoded();

myHttpPost.setEntity(new ByteArrayEntity(enc_req));

Самая важная строка — последняя (поскольку остальные просто создают запрос и, к счастью, мне не нужно их менять), которая добавляет сущность в HttpPost.

Проверяя этот ответ, кажется, что объект запроса

большая часть HTTP-запроса или ответа, состоящая из некоторых заголовков и тела, если оно присутствует. Кажется, это весь запрос или ответ без запроса или строки состояния.

Но это определение меня смущает, так как я не могу найти эквивалента чему-то с «заголовками и телом» в OkHttp. Что я пробовал:

MediaType textPlain = MediaType.parse("text/plain; charset=utf-8");
RequestBody requestBody = RequestBody.create(textPlain, request.getEncoded().toString());
Request myNewRequest = (new Request.Builder()).url(urlString).post(requestBody).build();

Но это не сработало (я получаю 500 с сервера). Кто-нибудь знает правильную эквивалентность?


person Jaime Alcántara Arnela    schedule 10.09.2019    source источник


Ответы (1)


Наконец-то я нашел ответ: я могу использовать TimeStampRequest, закодированный, как и раньше, без каких-либо изменений. Изменение, как я и думал, только для setEntity.

Это запрос с использованием OkHttp:

MediaType textPlain = MediaType.parse("binary");
RequestBody requestBody = RequestBody.create(textPlain, request.getEncoded());
Request myNewRequest = (new Request.Builder()).url(urlString).post(requestBody).build;

Как видите, единственное изменение по сравнению с предыдущим кодом, который я пробовал, заключается в том, что я использую binary вместо MediaType, что имеет смысл, поскольку мы отправляем массив байтов (ранее использовалось ByteArrayEntity из клиента Apache).

Надеюсь, это поможет кому-то.

person Jaime Alcántara Arnela    schedule 11.09.2019