1

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

url 登录是 : 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。

它只是在我尝试使用我的 android 应用程序连接时发生,但是当我尝试通过网络浏览器登录时,登录成功并且当我检查它时成功。

任何人都可以帮助我吗?

4

2 回答 2

1

尝试通过 getHeaderField 从第一个请求中获取会话信息,并通过正则表达式获取会话信息。

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

希望它对你有用。

于 2012-12-15T08:03:40.263 回答
0

我认为 TimonWang 给出了很好的回应,可能会对你有所帮助。


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

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

所以:

Login: returns auth_token
Every request: http://example.org/api?key=value&auth_token={auth_token}
于 2012-12-15T09:47:42.340 回答