我有一个简单的网站,我需要一个电子邮件和密码才能登录。这一切都适用于PC浏览器和Apple手机/平板电脑。
然而,droid设备将无法登录。我通过我的电脑路由我的测试手机并使用fiddler来查看http流量,Android正在编码电子邮件地址,所以我没有看到foo% 40here.com,因此我的服务器端验证失败,因为这不是有效的电子邮件地址。
我想到检测这个问题的简单方法是在验证之前查看电子邮件字符串,然后查找%40符号。但是如果默认情况下android会对urlencode进行调整,这可能会让我在问题上更进一步,并且不得不检查字符串,并猜测%是否是某些网址编码的一部分,或者真正的百分比是否会成为问题。< / p>
那么我可以将一个属性或过滤器应用于我的方法,以便框架根据需要对其进行取消编码,或者我是否需要根据具体情况对其进行处理?
答案 0 :(得分:1)
尝试在发送请求之前在您的请求中添加("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
行
像这样request.setHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
参见示例
HttpClient httpClient = new DefaultHttpClient();
HttpPost request = new HttpPost(Constants.mWebURL+Constants.mSendBloodReq);
request.setHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
// adding paramaters
List<NameValuePair> postParameters = new ArrayList<NameValuePair>();
postParameters.add(new BasicNameValuePair("user_id",params[0]));
postParameters.add(new BasicNameValuePair("password",params[1]));
UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(postParameters,"UTF-8");
request.setEntity(formEntity);
HttpResponse httpresponse = httpClient.execute(request);
//getting response
response = EntityUtils.toString(httpresponse.getEntity());
答案 1 :(得分:0)
控制器上的我的方法没有用[HttpPost]属性修饰。这似乎已经为我修好了