Вход в Moodle с помощью внешнего приложения для Android (Okhttp)

Спасибо за ваше время. Я программирую приложение Android для школы, и мне нужна форма аутентификации для входа в Moodle (сервер заканчивается на /index.php).

  1. Моя цель: получить заголовок «Set-Cookie» в ответе с активным файлом cookie. Это дается, если статус сервера возвращает «303 (см. Другое)».
  2. Мой вопрос: что я должен отправить на сервер входа в систему, чтобы получить статус «303» (и, следовательно, также правильный файл cookie)?

Я не знаю, является ли метод ".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-запросов), и он работает, только если я публикую «имя пользователя» и «пароль», как обычные параметры.

Я благодарен за каждый ответ и подсказку!


person P.Lenert    schedule 10.07.2016    source источник
comment
Мои разрешения: <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>   -  person P.Lenert    schedule 10.07.2016


Ответы (1)


Я ответил сам. Итак, вот правильный код:

                            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);
person PATRICK LENERT    schedule 27.07.2016