Показывать статическую HTML-страницу клиентам WiFi Direct из приложения Android.(Так же, как WiFi Captive Portal) - PullRequest
0 голосов
/ 28 ноября 2018

Мы разработали приложение WiFi Direct, в котором мы хотим показывать клиентам группы WiFi Direct статическую HTML-страницу всякий раз, когда они пытаются зайти в Интернет.Мы фиксируем их HTTP / HTTPS-запрос с помощью сокета и возвращаем статическую страницу в ответ.

Логика отлично работает с веб-сайтами, которые не используют https.Например, если я открываю www.fast.com, статическая html-страница возвращается клиенту, но если я открываю www.youtube.com, браузер Google Chrome выдает следующую ошибку:

ERR_TUNNEL_CONNECTION_FAILED

tunnel_error

Ниже приведен наш код:

public void returnLocalHtml(ParseRequest request) {
    BufferedReader reader = null;
    PrintWriter writer = null;
    InputStream inputStream = null;
    try {
        writer = new PrintWriter(socket.getOutputStream(), true);
        if (request.flag && request.requestType.equals("CONNECT")) {
            writer.print("HTTP/1.1 403" + "\r\n");
            writer.print("Content type: text/html" + "\r\n");
            writer.print("Content length: " + 0  + "\r\n");
            writer.flush();
        }
        inputStream = context.getAssets().open("index.html");
        reader = new BufferedReader(new InputStreamReader(inputStream));
        String response = "";
        byte[] value = new byte[4096];
        do {
            int read = inputStream.read(value);
            if (read == -1) {
                break;
            }
            response = response + new String(value, 0, read);
        } while (inputStream.available() > 0);
        writer.flush();
        writer.print("HTTP/1.1 200\r\n");
        writer.print("Content type: text/html" + "\r\n");
        writer.print("Content length: " + response.length() + "\r\n");
        writer.print("\r\n");
        writer.print(response + "\r\n");
        writer.flush();

    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (writer != null) {
            writer.close();
        }
        if (inputStream != null) {
            try {
                inputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        if (reader != null) {
            try {
                reader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

Мы считаем, что сделали что-то не так создание ответа HTTP ,

Любая помощь будет высоко оценена.

Спасибо.!

...