用Java创建代理服务器会破坏二进制文件

时间:2018-04-04 21:21:06

标签: java apache-httpclient-4.x spark-java proxy-server

我正在尝试使用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);
}

二进制文件仍然很糟糕。 这可能是什么问题?

Complete Code Link

0 个答案:

没有答案