Метод postUrl WebView работает только с явной строкой

Я уже могу сказать, что это глупый вопрос, но я пытаюсь войти на веб-страницу, используя postUrl(), и когда я явно пишу данные сообщения следующим образом:

String postData = "username=johndoe&password=mypassword";
myWebview.postUrl("https://moodle.domain.com/login/index.php", postData.getBytes());

Это работает, но если я построю postData с использованием переменных:

String postData = "username = "+user+"&password = "+pass;
myWebview.postUrl("https://moodle.domain.com/login/index.php", postData.getBytes());

Не работает. Неверные учетные данные. Я убедился, что обе строки имеют одинаковое значение, и попытался использовать UTF-8.

Я просто не понимаю, в этом нет никакого смысла.

если первый работает, то второй тоже должен работать. Я предполагаю, что браузер хранит данные, которые не позволяют работать второму методу. Попробуйте очистить данные WebView (или просто переустановите приложение). На этот раз протестируйте только второй метод.

Zun 22.06.2018 11:24

Значит, во втором случае user.equals("johndoe") и pass.equals("mypassword") оба являются true? Вы проверили поведение на стороне сервера? Есть ли у вас доступ на стороне сервера, чтобы иметь возможность работать с отладчиком и проверять, что сервер на самом деле видит (и делает)?

Thomas Timbul 22.06.2018 11:27

Я удалил приложение и попробовал использовать только второй метод, неверный логин. У меня нет доступа к серверу. Кроме того, есть это предупреждение -> W / ResourceType: для ресурса 0x7f0a0030 индекс записи (48) превышает тип entryCount (14) Ошибка получения записи для 0x7f0a0030 (t = 9 e = 48) (ошибка -75)

Yluna 22.06.2018 11:33
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
3
121
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Попробуйте следующее

String postData = "username = " + URLEncoder.encode(my_username, "UTF-8") + "&password = " + URLEncoder.encode(my_password, "UTF-8");
 webview.postUrl("https://moodle.domain.com/login/index.php",postData.getBytes());
Ответ принят как подходящий

Похоже, что у «пользователя» или «прохода» есть невидимые символы. Тебе нужно:

1) Проверить строку с помощью equals:

 String postData1 = "username=johndoe&password=mypassword";
 String postData2 = "username = "+user+"&password = "+pass;
 System.out.println(postData1.equals(postData2));

2) Попробуйте найти невидимые символы, например:

 String postData1 = "username=johndoe&password=mypassword";
 String postData2 = "username = "+user+"&password = "+pass;
 char[] arr1 = postData1.toCharArray();
 char[] arr2 = postData1.toCharArray();

 for (int i=0; i< Math.max(arr1.length(), arr2.length(); i++ ) {
     if (arr1[i] != arr2[i]) {
         System.out.println("Different i " + i);
     } 
 } 

Вы правы, я проверил длину обеих строк, первая была 38, вторая 45 ... когда я напечатал значение, я не мог видеть проклятые пустые места до конца. Я просто использовал postData.trim (). GetBytes (), и он работает, большое вам спасибо.

Yluna 22.06.2018 11:46

Другие вопросы по теме