Я строю u2f-совместимый клиент, который просто необходимо отправить объект JSON со следующей структурой к URL POST:дооснащения не прикрепление тело просить
{
challenge: [Base64-encoded String of 32 bytes],
registrationData: [Base64-encoded String of variable bytes]
}
Вот выдержка из моего кода, который работает нормально и не приводит к возникновению ошибки:
import okhttp3.FormBody;
import okhttp3.RequestBody;
import okhttp3.ResponseBody;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
public interface Registration {
@POST("register")
Call<ResponseBody> register(@Body RequestBody body);
}
private void sendRegistrationResponse(String baseURL, String challenge, String data) {
RequestBody data = new FormBody.Builder()
.add("challenge", challengeB64)
.add("registrationData", data)
.build();
Retrofit retro = new Retrofit.Builder()
.baseUrl(info.getString("baseURL"))
.build();
U2FServices.Registration reg = retro.create(U2FServices.Registration.class);
Call<ResponseBody> regCall = reg.register(data);
regCall.enqueue(this);
}
сервер отладки построен с узлом, и его POST «зарегистрировать» маршрут успешно вызывается клиентом каждый раз. Проблема заключается в том, что тело запроса всегда пустое.
exports.register = function (req, res) {
var body = req.body; // {}
}
Я представляю себе этот вопрос лежит на FormBody.Builder()
, но я не могу найти какую-либо документацию или код дает ясный пример того, как это работает. Любая помощь очень ценится!
2 вопроса. Ожидает ли ваш узел сервера «application/x-www-form-urlencoded»? Любая причина, по которой вы хотите использовать RequestBody вместо конвертера? Также вы можете добавить тег «retrofit2», как это делается для Retrofit2. – Emma
@ Emma Я просто не вижу смысла использовать конвертер. Все, что мне нужно сделать, это отправить простой JSON со свойствами «challenge» и «registrationData». Кроме того, я не указывал никаких настроек для POST на сервере. Я на самом деле новичок в веб-программировании и не знаком с заголовками и т. Д. Мне сказали, что по умолчанию запрос будет считан как октет-кодированный и должен работать, если я отправлю Java-строку на сервер. –
Я вижу. Это справедливо, чтобы не использовать конвертер. – Emma