Apache HttpClient 4.3.x няма хост по подразбиране?

Проблем с HttpClient 4.3.x.

Изглежда, че няма начин да прикачите хост по подразбиране към CloseableHttpClient за 4.3.x.

Това е разочароващо, тъй като изисква всички ваши създатели на заявки да знаят предварително цялата информация за хоста, вместо просто да изграждат частите на заявката, специфични за повикването, и да оставят клиента да попълни всички пропуснати настройки по подразбиране (напр. като хост по подразбиране, пристанище и т.н.).

С 4.2.x и предишни можете да зададете хост по подразбиране на клиента и всяка заявка се нуждае само от подпът + параметри.

Но с 4.3.x имате объркващи слоеве на setRoutePlanner(x) (които могат да имат прокси настройки) и setProxy(x) (които могат да бъдат заменени от планировчика на маршрути) и съм объркан как се установяват с действителния клиентски екземпляр. И отстраняването на грешки показва, че маршрутизаторът няма да се използва за default_host, а версията 4.3.2 всъщност очаква отхвърленият ClientPNames.DEFAULT_HOST да бъде зададен (за случай с нулев целеви хост), което може би е дефект.

Откривам, че apache httpclient излиза от дълбока граница с всички тези промени.

Също така примерите не изясняват напълно използването на http клиент за съжаление.

Като настрана: новият дизайн е такава кал, защо не просто setDefaultHost(x)? и изчистете объркването относно прокси наслояването(ята).

Освен ако не пропускам нещо, как се задава хост по подразбиране в http клиент 4.3.x?

Защо мислите, че те са се променили и са решили да направят всичко отпред в обектите на заявката срещу по подразбиране в клиента?


person hansSolo    schedule 31.03.2014    source източник
comment
И отстраняването на грешки показва, че маршрутизаторът няма да се използва за default_host, а версията 4.3.2 всъщност очаква отхвърленият ClientPNames.DEFAULT_HOST да бъде зададен (за случай с нулев целеви хост), което може би е дефект. Това наистина е дефект. Нулевата цел трябва да е напълно законна като вход към плановик на маршрут. Моля, повдигнете JIRA с проекта за този дефект   -  person ok2c    schedule 01.04.2014
comment
Благодаря за това. като цяло, защо проектът httpclient реши да екстернализира толкова голяма част от клиента по начин, който изисква задържане на всички тези части/части? страхотно е да имаш всички тези компоненти за замяна, но не е добре да държиш рефове навсякъде, за да изградиш обекти на заявка срещу настройка на атрибути на клиента и да му позволиш да хидратира обекта на заявка със стойности по подразбиране.   -  person hansSolo    schedule 02.04.2014
comment
Като се има предвид настроението на публикацията ви, съмнявам се, че всичко, което имам да кажа, би имало значение.   -  person ok2c    schedule 02.04.2014


Отговори (1)


По този начин може да се осигури целеви хост по подразбиране, като се използва персонализиран планировчик на маршрути

HttpRoutePlanner routePlanner = new DefaultRoutePlanner(DefaultSchemePortResolver.INSTANCE) {

    @Override
    public HttpRoute determineRoute(
            final HttpHost target,
            final HttpRequest request,
            final HttpContext context) throws HttpException {
        return super.determineRoute(
                target != null ? target : new HttpHost("some.default.host", 80),
                request, context);
    }

};
CloseableHttpClient client = HttpClients.custom()
        .setRoutePlanner(routePlanner)
        .build();
person ok2c    schedule 02.04.2014
comment
За мен и това е да не знам нищо за бъдещи httpclient планове, но горното е толкова многословно, че да се постигне проста настройка на хост по подразбиране на клиента, което се обзалагам, че ако погледнете клиентите си, ще намерите хост по подразбиране като 90%+ от времето, така че сега те трябва да правят mixins за това ... когато нямат интерес от възможността да превключват хостове в движение. - person hansSolo; 09.04.2014
comment
В дните на HC 3.x параметрите се добавяха без основателна причина (често защото някой индивид успя да генерира достатъчно шум в пощенския списък) поради присъщи ограничения на архитектурата на компонента. Въвеждането на нови параметри беше единственият начин да се персонализира поведението на много основни компоненти на HC. В резултат на това HC 3.x в крайна сметка има няколко десетки параметри, повечето от които са напълно неуместни извън много специфичен контекст на приложение. За съжаление, HC 4.0 до голяма степен наследи 3.x API за предпочитания (поради различни причини) с всички тези незначително полезни параметри. - person ok2c; 09.04.2014
comment
Продължение: HC 4.3 предлага само ограничен брой параметри, които са общи и приложими към различни контексти на приложения. Човек все още може да персонализира поведението на HttpClient чрез инжектиране на потребителски реализации на манипулатори или стратегически интерфейси. Целевият хост по подразбиране е добър пример за нещо, което никога не е трябвало да се използва като конфигурационен параметър на първо място. - person ok2c; 09.04.2014
comment
Този отговор трябва да бъде приет, тъй като решава проблема с хоста по подразбиране. - person barfuin; 05.04.2018