当通过Curl或Android发布相同的负载时,Rails参数是不同的
当从Android或通过curling发布相同的基本JSON时,结果是不同的 我想知道为什么?我假设Rails有一些我不理解的地方 命令行HTTP POST当通过Curl或Android发布相同的负载时,Rails参数是不同的,android,ruby-on-rails,json,curl,Android,Ruby On Rails,Json,Curl,当从Android或通过curling发布相同的基本JSON时,结果是不同的 我想知道为什么?我假设Rails有一些我不理解的地方 命令行HTTP POST OkHttpClient client = new OkHttpClient(); JSONObject userObject = new JSONObject(); userObject.put("email", mUserEmail); userObject.put("password", mUserPassword); userOb
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()...
卷曲'-X POST-H'内容类型:
application/json'-d'{“user”:{“email”:”awesome@example.com",
“密码”:“helloworld”,“密码确认”:“helloworld”}”
服务器日志
参数:{“用户”=>{“电子邮件”=>“awesome@example.com",
“密码”=>“[过滤]”,“密码确认”=>“[过滤]”},
“注册”=>{“用户”=>{“电子邮件”=>”awesome@example.com",
“密码”=>“[过滤]”,“密码确认”=>“[过滤]”}
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()...
服务器日志
参数:
{“用户”=>“{\“电子邮件\”:”awesome@example.com\“,”密码\“:\”helloworld \“,”密码确认\“:\”helloworld \“}”
铁路线路:
devise_scope :user do
namespace :mobile do
post '/register', to: 'registrations#create', as: :register
end
end
差异:
devise_scope :user do
namespace :mobile do
post '/register', to: 'registrations#create', as: :register
end
end
- 卷发隐藏了密码,但Android没有
- curling添加了一个额外的嵌套JSON,所有数据都重复
更新 我在控制器操作中选中了
request.env[“CONTENT\u TYPE”]
,我发现内容类型存在差异
Curl->application/json
Android->多部分/表单数据;边界=…
这会导致问题吗
从安卓方面进行更改容易吗?我在请求中添加了.header(“Content-Type”,“application/json”)
,但没有什么区别?我认为Android HTTP POST缺少Content-Type:application/json
header,因为它发送多部分表单数据。因此rails应用程序将其记录为纯字符串数据,而不是解析、注册用户和过滤密码
另外,在curl
命令的情况下,解析的JSON用户对象用于注册用户。重复的日志条目可能在用户注册期间完成
要使这两个请求等效,请尝试使用中给出的发送到服务器的示例。我认为Android HTTP POST缺少内容类型:application/json
头,因为它发送多部分表单数据。因此rails应用程序将其记录为纯字符串数据,而不是解析、注册用户和过滤密码
另外,在curl
命令的情况下,解析的JSON用户对象用于注册用户。重复的日志条目可能在用户注册期间完成
要使两个请求等效,请尝试使用中给出的发送到服务器的示例