Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 改装未按要求连接车身_Node.js_Retrofit2_Okhttp3_Fido U2f - Fatal编程技术网

Node.js 改装未按要求连接车身

Node.js 改装未按要求连接车身,node.js,retrofit2,okhttp3,fido-u2f,Node.js,Retrofit2,Okhttp3,Fido U2f,我正在构建一个与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

我正在构建一个与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);
}

我想问题在于FormBody.Builder,但我找不到任何文档或代码来提供它如何工作的清晰示例。非常感谢您的帮助

让我们试试这个-希望您的节点服务器需要application/json,否则我们需要更改该部分

RequestBody data = RequestBody.create(MediaType.parse("application/json"), stringJson);
显然,FormBody的默认媒体类型是application/x-www-form-urlencoded,如果您的节点服务器不需要这种请求类型,它可能会失败

如果您可以查看节点的配置,最好检查一下,以确定请求应该使用哪种媒体类型

这是一个带有express server配置的节点示例

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
此节点服务器可以使用json和表单url编码


让我知道这是否有效。

让我们试试这个-希望您的节点服务器需要application/json,否则我们需要更改该部分

RequestBody data = RequestBody.create(MediaType.parse("application/json"), stringJson);
显然,FormBody的默认媒体类型是application/x-www-form-urlencoded,如果您的节点服务器不需要这种请求类型,它可能会失败

如果您可以查看节点的配置,最好检查一下,以确定请求应该使用哪种媒体类型

这是一个带有express server配置的节点示例

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
此节点服务器可以使用json和表单url编码


让我知道这是否有效。

2个问题。您的节点服务器是否需要application/x-www-form-urlencoded?您想使用RequestBody而不是converter的原因是什么?此外,您可能还需要添加Refught2标记,因为这是用于Refught2的。@Emma我不明白使用转换器的意义。我所需要做的就是发送一个简单的JSON,其中包含属性挑战和注册数据。此外,我没有为服务器上的帖子指定任何设置。事实上,我对网络编程还不熟悉,也不熟悉标题等。有人告诉我,默认情况下,请求将被读取为八位字节编码,如果我向服务器发送一个Java字符串,它应该可以工作。我明白了。不使用转换器是公平的。2个问题。您的节点服务器是否需要application/x-www-form-urlencoded?您想使用RequestBody而不是converter的原因是什么?此外,您可能还需要添加Refught2标记,因为这是用于Refught2的。@Emma我不明白使用转换器的意义。我所需要做的就是发送一个简单的JSON,其中包含属性挑战和注册数据。此外,我没有为服务器上的帖子指定任何设置。事实上,我对网络编程还不熟悉,也不熟悉标题等。有人告诉我,默认情况下,请求将被读取为八位字节编码,如果我向服务器发送一个Java字符串,它应该可以工作。我明白了。不使用converter是公平的。我发现我的Mac由于某种原因阻塞了服务器端口,即使防火墙还没有启用,而且以前也没有阻塞。在我修复之前,无法检查主体解析选项是否有用,因此调试可能会有一点延迟。谢谢。我已经解决了其他问题,并尝试了你的解决方案。现在,应用程序与服务器的通信非常完美。谢谢我发现我的Mac由于某种原因阻塞了服务器端口,即使防火墙还没有启用,以前也没有阻塞。在我修复之前,无法检查主体解析选项是否有用,因此调试可能会有一点延迟。谢谢。我已经解决了其他问题,并尝试了你的解决方案。现在,应用程序与服务器的通信非常完美。谢谢