Apache Http Client переопределяет пользовательский заголовок длины содержимого

Я использую Apache Http Client для загрузки файла. Когда я устанавливаю для длины содержимого неправильный размер файла.

Заголовок длины содержимого переопределяется размером файла. Это приводит к сбою приемочного теста, поскольку он позволяет загрузить файл, поскольку длина содержимого равна размеру файла.

public class RestClient {
    Client client = null;

    public RestClient() {
        client = Client.create();
        //client.addFilter(new LoggingFilter(System.out));
    }

    public ClientResponse postData(String url, Map headerMap) throws IOException {
        ClientResponse response = null;

        try {
            WebResource webResource = client.resource(url);
            Builder requestBuilder = webResource.getRequestBuilder();
            Iterator it = headerMap.entrySet().iterator();

            while (it.hasNext()) {
                Map.Entry pair = (Map.Entry) it.next();
                requestBuilder = requestBuilder.header(pair.getKey().toString(), pair.getValue());
            }

            if (headerMap.get("filename") != null) {
                ClassLoader cl = getClass().getClassLoader();
                InputStream fileInStream = cl.getResourceAsStream(headerMap.get("filename").toString());
                MessageDigest md = MessageDigest.getInstance("SHA-256");
                requestBuilder = requestBuilder.entity(fileInStream);
            }

            response = requestBuilder.header("Expect", new String("100-continue"))
                    .post(ClientResponse.class);
        } catch (Exception e) {
            e.printStackTrace();
        }

        return response;
    }

    public ClientResponse getData(String url) {
        ClientResponse response = null;

        WebResource webResource = client.resource(url);
        response = webResource.get(ClientResponse.class);

        return response;
    }
}

В настоящее время карта заголовков имеет обязательные заголовки (Content-Length, Content-Type и т. д.)

Могу ли я установить Content-Length явно без внутреннего переопределения клиента. Подойдет любой http-клиент.


person Nikhil Ghag    schedule 02.06.2016    source источник


Ответы (1)


Любой уважающий себя HTTP-клиент должен делать то же самое. HttpURLConnection определенно делает. Ваш тест недействителен. Длина содержимого должна соответствовать фактическому количеству переданных байтов.

person user207421    schedule 02.06.2016