我正在尝试使用Spark Java在java中创建代理服务器。
我列出了任何传入请求,并通过Apache Http Client将任何传入请求发送到目标服务器。 然后我通过处理标题,状态和文本来转换传入的请求。
现在这个工作得很好,除了二进制文件。字体等二进制文件已损坏。我的代码是:
private static void mapStatus(HttpResponse response, spark.Response res) {
res.status(response.getStatusLine().getStatusCode());
}
private static void mapHeaders(HttpResponse response, spark.Response res) {
for (Header header : response.getAllHeaders()) {
res.header(header.getName(), header.getValue());
}
}
private static String result(HttpResponse response) throws ParseException, IOException {
HttpEntity entity = response.getEntity();
return entity == null ? "" : EntityUtils.toString(entity);
}
我怀疑问题与result()方法有关,因为它将所有响应视为文本。我怎么试过按原样处理流:
private static void extractResponse(HttpResponse httpResponse, HttpServletResponse response) {
InputStream inputStream = null;
try {
HttpEntity entity = httpResponse.getEntity();
if(entity == null)
return;
inputStream = entity.getContent();
copyStream(inputStream, response.getOutputStream());
} catch (IllegalStateException | IOException e) {
} finally {
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
}
}
}
}
private static void copyStream(InputStream input, OutputStream output) throws IOException {
IOUtils.copy(input, output);
}
二进制文件仍然很糟糕。 这可能是什么问题?