登录API服务器失败

时间:2012-12-12 14:59:33

标签: android api http httpclient

使用我的代码登录API服务器时出现问题, 在API文档中,我应该使用用户名,密码和密钥登录以使用API​​。

网址登录名为:http://xxx.xxx.xxx.xxx/api/Session/login?context=api&skey=2354e5rufygbiuk7bikuyhboulygh&USR=zzzz&PWD=xxx

当我使用httpURLConnection执行上面的url时,服务器会给出“OK”响应,表示登录成功。

但是当我尝试检查我是否登录时使用:http://xxx.xxx.xxx.xxx/api/Session/isLogin?context=api时,服务器会给出“FALSE”响应,这意味着我没有进入,因此我无法使用该API。 / p>

当我尝试使用我的Android应用程序进行连接时会发生这种情况,但是当我尝试通过Web浏览器登录时,登录成功并且在我检查时成功。

任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:1)

尝试通过getHeaderField从第一个请求获取会话信息,并通过regex获取会话信息。

    String session_value=getHeaderField("Set-Cookie");

使用会话信息进行下一次请求。

    URL url = new URL(link);
    HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
    //fetch session
    session_value = urlConnection.getHeaderField("Set-Cookie");
    String[] sessionId = session_value.split(";");
    //set session to do more operation
    urlConnection.setRequestProperty("Cookie", sessionId[0])

希望它对你有用。

答案 1 :(得分:0)

我认为TimonWang已经做出了很好的回应,应该可以帮到你。


如果您自己管理服务器,我会建议另一种解决方案。在其他情况下,请忽略此帖。

如果我是你,我会使API更加RESTful,这意味着你不会使用会话来保存你的状态。在这种情况下,登录应返回类似于身份验证令牌(每个登录/用户都是唯一的),必须在某处保存。登录成功后,身份验证令牌可用于以后的请求。因此,身份验证令牌应在整个会话期间保存在设备上,并应添加到您在该会话期间发送到服务器的每个请求中。由于身份验证令牌的唯一性,服务器可以查看它是哪个用户。

所以:

Login: returns auth_token
Every request: http://example.org/api?key=value&auth_token={auth_token}