2016-07-10 5 views
0

お時間を頂きましてありがとうございます。私は学校向けにAndroid Appをプログラミングしており、Moodleログイン用の認証書式が必要です(サーバーは/index.phpで終わります)。Moodle外部Androidアプリ(Okhttp)でログイン

  1. 私の目標:アクティブCookieを含むレスポンスの「Set-Cookie」ヘッダーを取得します。これは、サーバステータスが "303(その他を参照)"を返す場合に与えられます。
  2. 私の質問:ステータス「303」(したがって正しいCookie)を取得するには、Login Serverに何を投稿する必要がありますか?

".add"メソッドが正解か間違っているか、または多かれ少なかれサーバーに送信する必要があるかどうかはわかりません。

class MoodleLogin{ 

public static void FirstRequest(String url) throws Exception { 

    final OkHttpClient client = new OkHttpClient(); 

    //FORM BODY 
    RequestBody formBody = new FormBody.Builder() 
       .add("username", USERNAME) // Username 
       .addEncoded("password", PASSWORT) //Passwort 
       .add("token", "6f65e84f626ec97d9eeee7ec45c88303") //Security Key for Moodle mobile web service (I dont know if I need that) 
       .build(); 

    // A normal Request 
    Request request = new Request.Builder() 
         .url(url) 
         .post(formBody) 
         .build(); 

    // Asynchronous Call via Callback with onFailure and onResponse 
    client.newCall(request).enqueue(new okhttp3.Callback() { 

       @Override 
       public void onFailure(Call call, IOException e) { 
       Log.i("Internet", "request failed: " + e.toString()); 
       } 

       @Override 
       public void onResponse(Call call, Response response) throws IOException { 

         if (!response.isSuccessful()) { // Server Status is not 200 - THAT IS WHAT I WANT 

          Log.d("Server Status", response.message().toString()); 

          throw new IOException("Unexpected code "); 

         } else { // Server Status is 200(OK) 

          Log.d("Server Status", response.message().toString()); 

         } 

         response.body().close(); 
        } 
       }); // End of "onResponse" 

} 

この平和のコードは、サーバーステータス「200」(私の場合は間違っています)を返します。 ステータス "303"を取得するために私は何を変更する必要がありますか?私はhurl.it(HTTP RequestsのWebサイト)でそれをテストし、通常のパラメータのように "username"と "password"を投稿した場合にのみ動作します。

すべての回答とヒントに感謝します!

+0

マイ権限:だからここに右のコードは '<使用許可アンドロイド:名= "android.permission.INTERNETあなた"/> <使用許可アンドロイド:名= "android.permission.ACCESS_NETWORK_STATEの" /> ' –

答えて

0

私は自分自身でそれに答えました。

      Connection.Response res = Jsoup 
            .connect("your Moodle-Login Page") 
            .data("username", username, "password", password) 
            .method(Connection.Method.POST) 
            .execute(); 

          String Login_cookies = res.cookies().toString(); 
          String cookie = Login_cookies.substring(1, 50); 
          System.out.println("COOKIES: "+cookie); 
関連する問題