Java Android HTTPGet到Rails REST登录

Java Android HTTPGet到Rails REST登录,java,android,ruby-on-rails,ruby-on-rails-3,rest,Java,Android,Ruby On Rails,Ruby On Rails 3,Rest,我有一个需要电子邮件和密码的登录名 如果我从Postman rest客户端用以下命令点击它: www.site.com/login.json?session[email]=bob@gmail.com&session[password]=password 服务器Rails可以很好地读取它,如下所示: {"session"=>{"email"=>"bob@gmail.com", "password"=>"password"}, "action"=>"create",

我有一个需要电子邮件和密码的登录名

如果我从Postman rest客户端用以下命令点击它:

www.site.com/login.json?session[email]=bob@gmail.com&session[password]=password
服务器Rails可以很好地读取它,如下所示:

{"session"=>{"email"=>"bob@gmail.com", "password"=>"password"}, "action"=>"create", "controller"=>"sessions", "format"=>"json"}
            HttpClient httpclient = new DefaultHttpClient();

            //get the parameters
            String email = params[0];
            String password = params[1];

            String url = "http://www.site.com/login.json?session[email]=" + email + "?session[password]=" + password;

            HttpGet httpget = new HttpGet(url);

            httpget.setHeader("Accept", "application/json");
            httpget.setHeader("Content-type", "application/json");
response = httpclient.execute(httpget);
{"session"=>{}, "action"=>"create", "controller"=>"sessions", "format"=>"json"}
但是,如果我从android发送与HTTPGet相同的内容,如下所示:

{"session"=>{"email"=>"bob@gmail.com", "password"=>"password"}, "action"=>"create", "controller"=>"sessions", "format"=>"json"}
            HttpClient httpclient = new DefaultHttpClient();

            //get the parameters
            String email = params[0];
            String password = params[1];

            String url = "http://www.site.com/login.json?session[email]=" + email + "?session[password]=" + password;

            HttpGet httpget = new HttpGet(url);

            httpget.setHeader("Accept", "application/json");
            httpget.setHeader("Content-type", "application/json");
response = httpclient.execute(httpget);
{"session"=>{}, "action"=>"create", "controller"=>"sessions", "format"=>"json"}
服务器无法识别参数,我最终得到一个空的json对象,如下所示:

{"session"=>{"email"=>"bob@gmail.com", "password"=>"password"}, "action"=>"create", "controller"=>"sessions", "format"=>"json"}
            HttpClient httpclient = new DefaultHttpClient();

            //get the parameters
            String email = params[0];
            String password = params[1];

            String url = "http://www.site.com/login.json?session[email]=" + email + "?session[password]=" + password;

            HttpGet httpget = new HttpGet(url);

            httpget.setHeader("Accept", "application/json");
            httpget.setHeader("Content-type", "application/json");
response = httpclient.execute(httpget);
{"session"=>{}, "action"=>"create", "controller"=>"sessions", "format"=>"json"}

有人知道如何在android中形成这个HTTPGet调用中的参数,以便像在rest客户端调用中一样工作吗?谢谢

似乎你的URL有一个输入错误,参数被搞乱了。这一行:

String url = "http://www.site.com/login.json?session[email]=" + email + "?session[password]=" + password;
应该是

String url = "http://www.site.com/login.json?session[email]=" + email + "&session[password]=" + password;

请注意,我已将?session[password]=替换为&session[password]=。

您的URL中似乎有一个输入错误,参数被弄乱了。这一行:

String url = "http://www.site.com/login.json?session[email]=" + email + "?session[password]=" + password;
应该是

String url = "http://www.site.com/login.json?session[email]=" + email + "&session[password]=" + password;

请注意,我已将?session[password]=替换为&session[password]=。

是否需要发送用户代理或其他HTTP头才能使其有效?您是否使用Fiddler2或其他HTTP跟踪跟踪HTTP连接?那个而不是&也许是吧


对于类型安全的Android REST客户端,请尝试:它工作得非常好,您不必担心手动解析。

您需要发送用户代理或其他HTTP头才能使其有效吗?您是否使用Fiddler2或其他HTTP跟踪跟踪HTTP连接?那个而不是&也许是吧

对于用于Android的类型安全REST客户端,请尝试:它工作得非常好,您不必担心手动解析。

*将URL中的?会话替换为&session,因为这是一个错误

如果问题仍然存在,请尝试使用POST请求,如下所示: -首先,以这种方式公开电子邮件和密码是不安全的 -在Rails控制器中,可以使用params标记轻松处理POST变量,例如params[:tag],其中标记是Json对象中的键。

*将URL中的?会话替换为&session,因为这是一个错误

如果问题仍然存在,请尝试使用POST请求,如下所示: -首先,以这种方式公开电子邮件和密码是不安全的
-在Rails控制器中,可以使用params标记轻松处理POST变量,例如params[:tag],其中标记是Json对象中的键。

我的一个想法是,可以尝试对URL的查询字符串进行编码

String query = URLEncoder.encode("session[email]=" + email + "?session[password]=" +                 password", "UTF-8");
String url = "http://www.site.com/login.json?" + query;
HttpGet httpget = new HttpGet(url);
....

我的一个想法是,您可以尝试对URL的查询字符串进行编码

String query = URLEncoder.encode("session[email]=" + email + "?session[password]=" +                 password", "UTF-8");
String url = "http://www.site.com/login.json?" + query;
HttpGet httpget = new HttpGet(url);
....

这个问题有帮助吗?我没有ruby方面的经验,但是你试过对电子邮件进行编码吗?试试这个为什么你要在HTTP GET请求中设置内容类型?这个问题有帮助吗?我没有ruby方面的经验,但是你试过对电子邮件进行编码吗?试试这个为什么要在HTTP GET请求中设置内容类型?