Перейти к содержанию

Передача дополнительных HTTP заголовков при установке Websocket соединения

В сборке Android SDK 1.1.0.16 добавлена возможность передачи дополнительных HTTP заголовков при установке Websocket соединения с сервером. Для этого используется функция

Session.connect(Connection connection, java.util.Map<java.lang.String,java.lang.String> customHeaders)

Допустим, что на сервере настроено проксирование Websocket трафика с авторизацией при помощи nginx. При этом параметры авторизации должны передаваться в Websocket URL

wss://login:password@test.flashphoner.com/wss

В этом случае, заголовок Authorization для передачи имени и пароля пользователя может быть сформирован из параметров Websocket URL следующим образом:

code

private Map<String, String> getBasicAuthHeader(String url) {
    if (url.contains("@")) {
        String authorization = url.substring(url.indexOf(":")+3, url.indexOf("@"));
        String base64Auth = Base64.getEncoder().encodeToString(authorization.getBytes());
        String header = "Basic " + base64Auth;
        Map<String, String> basicAuthheader = new HashMap<>();
        basicAuthheader.put("Authorization", header);

        return basicAuthheader;
    }

    return null;
}

и отправлен при установке соединения

code

session.connect(new Connection(), getBasicAuthHeader(url));