Упреждающий базовый аут с HttpUrlConnection?

Каков наилучший способ использования превентивной базовой HTTP-аутентификации с использованием HttpUrlConnection. (Предположим, что теперь я не могу использовать HttpClient).

EDIT для уточнения: я правильно устанавливаю un / pw в заголовке запроса, используя кодировку Base64. Существуют ли какие-либо дополнительные флаги или свойства, которые необходимо установить, или факт, что я устанавливаю базовые заголовки заголовков для запроса, все, что необходимо для превентивного базового auth?

HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection(); String encoded = Base64.getEncoder().encodeToString((username+":"+password).getBytes(StandardCharsets.UTF_8)); //Java 8 connection.setRequestProperty("Authorization", "Basic "+encoded); 

Затем используйте соединение как обычно.

Если вы используете Java 7 или ниже, вам понадобится метод для кодирования String для Base64, например:

 byte[] message = (username+":"+password).getBytes("UTF-8"); String encoded = javax.xml.bind.DatatypeConverter.printBase64Binary(message); 

Да, это все, что вам нужно сделать, чтобы использовать Basic Auth. Код, указанный выше, чтобы установить свойство Request, должен быть выполнен сразу после открытия соединения и до получения streamов ввода или вывода.

Кстати, в случае, если кто-то другой сталкивается с этим, проблема с андроидом также присутствует, если вы используете org.apache.commons.codec.binary.Base64 и используете Base64.encodeBase64String() . Вам нужно сделать Base64.encodeBase64() и получить байт [], затем построить строку.

Это полностью задело меня, что результаты будут разными для линии, заканчивающейся между этими двумя методами.

Вы можете использовать java.net.Authenticator для настройки базового auth. глобально для каждого запроса, отправляемого вашим приложением, см .:

У меня тоже была эта проблема. И теперь я решил эту проблему. Мой код:

  URL url = new URL(stringUrl); String authStr = "MyAPIKey"+":"+"Password"; System.out.println("Original String is " + authStr); // encode data on your side using BASE64 byte[] bytesEncoded = Base64.encodeBase64(authStr .getBytes()); String authEncoded = new String(bytesEncoded); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestProperty("Authorization", "Basic "+authEncoded); 

Это может помочь многим другим. Удачи.

вам нужно сделать это, просто скопируйте его, чтобы он был счастлив

  HttpURLConnection urlConnection; String url; // String data = json; String result = null; try { String username ="[email protected]"; String password = "12345678"; String auth =new String(username + ":" + password); byte[] data1 = auth.getBytes(UTF_8); String base64 = Base64.encodeToString(data1, Base64.NO_WRAP); //Connect urlConnection = (HttpURLConnection) ((new URL(urlBasePath).openConnection())); urlConnection.setDoOutput(true); urlConnection.setRequestProperty("Content-Type", "application/json"); urlConnection.setRequestProperty("Authorization", "Basic "+base64); urlConnection.setRequestProperty("Accept", "application/json"); urlConnection.setRequestMethod("POST"); urlConnection.setConnectTimeout(10000); urlConnection.connect(); JSONObject obj = new JSONObject(); obj.put("MobileNumber", "+97333746934"); obj.put("EmailAddress", "[email protected]"); obj.put("FirstName", "Danish"); obj.put("LastName", "Hussain"); obj.put("Country", "BH"); obj.put("Language", "EN"); String data = obj.toString(); //Write OutputStream outputStream = urlConnection.getOutputStream(); BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(outputStream, "UTF-8")); writer.write(data); writer.close(); outputStream.close(); int responseCode=urlConnection.getResponseCode(); if (responseCode == HttpsURLConnection.HTTP_OK) { //Read BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream(), "UTF-8")); String line = null; StringBuilder sb = new StringBuilder(); while ((line = bufferedReader.readLine()) != null) { sb.append(line); } bufferedReader.close(); result = sb.toString(); }else { // return new String("false : "+responseCode); new String("false : "+responseCode); } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (JSONException e) { e.printStackTrace(); } 

Что касается проблемы кодирования Base64, я нашел эту библиотеку: http://sourceforge.net/projects/migbase64/

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

  • Android: навигационная панель для всех видов деятельности
  • Android: отправка данных> 20 байтов BLE
  • Поместить внешнюю библиотеку в JAR?
  • Как работает Activity.finish () в Android?
  • Исключение в streamе "main" java.lang.NoSuchMethodError: main
  • Получение SMS-сообщений в Android-приложении
  • Метод сравнения нарушает его общий контракт в Java 7
  • Получение программной версии ОС на Android программно
  • Android - запись пользовательского (составного) компонента
  • Как сделать PDF в Android
  • Обнаружение изменений состояния, внесенных в BluetoothAdapter?
  • Давайте будем гением компьютера.