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アプリケーションを使用して接続しようとすると発生しますが、Webブラウザーからログインしようとすると、ログインが成功し、チェックすると成功します。

誰でも私を助けてくれますか?

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 に答える