通过Curl或Android发布相同的有效内容时,Rails参数会有所不同

从Android或通过卷曲发布相同的基本JSON时,结果会有所不同。

我试图理解为什么? 我假设有一些关于Rails的东西,我不明白。

命令行HTTP POST

curl'http:// localhost:3000 / mobile / register'-X POST -H'Content-Type:application / json'-d'{“user”:{“email”:“awesome@example.com”,“密码“:”helloworld“,”password_confirmation“:”helloworld“}}'

服务器日志

参数:{“user”=> {“email”=>“awesome@example.com”,“password”=>“[FILTERED]”,“password_confirmation”=>“[FILTERED]”},“registration”=> {“user”=> {“email”=>“awesome@example.com”,“password”=>“[FILTERED]”,“password_confirmation”=>“[FILTERED]”}}}

Android HTTP POST

OkHttpClient client = new OkHttpClient();
JSONObject userObject = new JSONObject();

userObject.put("email", mUserEmail);
userObject.put("password", mUserPassword);
userObject.put("password_confirmation", mUserPasswordConfirmation);

String userString = userObject.toString();

RequestBody requestBody = new MultipartBody.Builder()
        .setType(MultipartBody.FORM)
        .addFormDataPart("user", userString)
        .build();

Request request = new Request.Builder()
        .url(REGISTER_API_ENDPOINT_URL)
        .method("POST", RequestBody.create(null, new byte[0]))
        .post(requestBody)
        .build();

Call call = client.newCall(request);
call.enqueue(new Callback()...

服务器日志

参数:{“user”=>“{”email “:”awesome@example.com “,”password “:”helloworld “,”password_confirmation “:”helloworld “} “}

Rails路线:

devise_scope :user do 
    namespace :mobile do
      post '/register', to: 'registrations#create', as: :register
    end
end


区别:

  • 卷曲隐藏密码,但Android不
  • 卷曲添加了重复的所有数据的附加嵌套JSON
  • 我不确定是什么导致了这些差异?

    UPDATE

    我在控制器操作中检查了request.env["CONTENT_TYPE"] ,并发现Content-Type差异。

    卷曲 - > application/json

    Android - > multipart/form-data; boundary=... multipart/form-data; boundary=...

    这是否会导致问题?

    从Android侧更换容易吗? 我向.header("Content-Type", "application/json")添加了.header("Content-Type", "application/json") ,但它没有区别?


    我认为Android HTTP POST缺少Content-Type: application/json头,因为它发送多部分表单数据。 因此,rails应用程序将它记录为纯字符串数据而不是解析它,注册用户和过滤密码。

    此外,在curl命令的情况下,解析的JSON用户对象用于注册用户。 重复的日志条目可能在此用户注册期间完成。

    要使这两个请求等效,请尝试使用http://square.github.io/okhttp/中提供的POST TO A SERVER示例。

    链接地址: http://www.djcxy.com/p/48783.html

    上一篇: Rails parameters are different when posting the same payload via Curl or Android

    下一篇: Cannot Sign In With CURL In Rails Using POST