1

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

如果我从邮递员休息客户那里得到它:

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"}

但是,如果我使用来自 android 的 HTTPGet 发送相同的内容,如下所示:

            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);

服务器无法识别参数,我最终得到一个空的 json 对象,如下所示:

{"session"=>{}, "action"=>"create", "controller"=>"sessions", "format"=>"json"}

任何人都知道如何在 android 中的这个 HTTPGet 调用中形成参数,以便像在其余客户端调用中一样工作?谢谢!

4

4 回答 4

6

看来您在 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]=.

于 2013-09-08T10:48:45.800 回答
0

您是否需要发送 USER-AGENT 或其他 HTTP 标头才能使其有效?您是否使用 Fiddler2 或其他 HTTP 跟踪跟踪 HTTP 连接?那 ?而不是 & 可能是它。

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

于 2013-09-14T12:02:47.833 回答
0

我的一个想法是,您可以尝试对 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);
....
于 2013-09-14T15:20:08.630 回答
-1

* 将 URL 中的 ?session 替换为 &session 是错误的。

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

于 2013-09-14T14:49:12.077 回答