改装不附体请求
Retrofit not attaching body to request
我正在构建一个符合 U2F 的客户端,它只需要将具有以下结构的 JSON 对象发送到 POST URL:
{
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);
}
调试服务器是用Node搭建的,其POST"register"路由每次都被客户端成功调用。问题是,请求的正文总是空的。
exports.register = function (req, res) {
var body = req.body; // {}
}
我想问题出在 FormBody.Builder()
上,但我找不到任何文档或代码来清楚地说明它是如何工作的。非常感谢任何帮助!
让我们试试这个 -(希望您的节点服务器期待 application/json),否则我们需要更改那部分。
RequestBody data = RequestBody.create(MediaType.parse("application/json"), stringJson);
显然,FormBody 的默认媒体类型是 "application/x-www-form-urlencoded",如果您的节点服务器不期望这种请求类型,它可能会失败。
如果您可以查看节点的配置,最好检查一下以确定请求应使用哪种媒体类型。
这是具有快速服务器配置的节点示例。
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
此节点服务器可以预期 json 和形式 url 编码。
让我知道这是否有效。
我正在构建一个符合 U2F 的客户端,它只需要将具有以下结构的 JSON 对象发送到 POST URL:
{
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);
}
调试服务器是用Node搭建的,其POST"register"路由每次都被客户端成功调用。问题是,请求的正文总是空的。
exports.register = function (req, res) {
var body = req.body; // {}
}
我想问题出在 FormBody.Builder()
上,但我找不到任何文档或代码来清楚地说明它是如何工作的。非常感谢任何帮助!
让我们试试这个 -(希望您的节点服务器期待 application/json),否则我们需要更改那部分。
RequestBody data = RequestBody.create(MediaType.parse("application/json"), stringJson);
显然,FormBody 的默认媒体类型是 "application/x-www-form-urlencoded",如果您的节点服务器不期望这种请求类型,它可能会失败。
如果您可以查看节点的配置,最好检查一下以确定请求应使用哪种媒体类型。
这是具有快速服务器配置的节点示例。
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
此节点服务器可以预期 json 和形式 url 编码。
让我知道这是否有效。