Мы разработали приложение WiFi Direct, в котором мы хотим показывать клиентам группы WiFi Direct статическую HTML-страницу всякий раз, когда они пытаются зайти в Интернет.Мы фиксируем их HTTP / HTTPS-запрос с помощью сокета и возвращаем статическую страницу в ответ.
Логика отлично работает с веб-сайтами, которые не используют https.Например, если я открываю www.fast.com, статическая html-страница возвращается клиенту, но если я открываю www.youtube.com, браузер Google Chrome выдает следующую ошибку:
ERR_TUNNEL_CONNECTION_FAILED
Ниже приведен наш код:
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 ,
Любая помощь будет высоко оценена.
Спасибо.!