Я пытаюсь написать HTTP прокси-сервер в Java. Мое приложение получает запрос GET от браузера и перенаправляет его по назначению. Я хотел бы прочитать заголовки пакета ответа, а затем переслать его обратно в браузер. Это прекрасно работает для меня с text / html-контентом, если он не закодирован в gzip. Я пробовал несколько способов сделать это, и в настоящее время я использую DataInputStream
и DataOutputStream
, но браузер показывает только странные символы.
Вот упрощенная версия кода:
ArrayList<String> headerlist = new ArrayList<String>();
InputStream input = clientsocket.getInputStream();
dis = new DataInputStream(input);
serverinputstream = new InputStreamReader(input);
bufferreader = new BufferedReader(serverinputstream);
while(!(line = bufferedreader.readLine()).equals("")) {
headerlist.add(line);
}
PrintWriter pw = new PrintWriter(serveroutputstream, false);
DataOutputStream out = new DataOutputStream(serveroutputstream);
for (int i = 0; i < headerlist.size(); i++) {
pw.println(headerlist.get(i));
}
pw.println();
int bit;
while((bit = dis.read()) != -1) {
out.writeByte(bit);
}
out.flush();
dis.close();
out.close();
Этот код обрабатывает только данные, которые не являются простым текстом, но, похоже, не работают. Должен ли я использовать другой метод, или я просто делаю что-то не так?