Я использую Apache HttpComponents (core - 4.1.3, httpclient 4.1.1), чтобы сделать http-запросы в клиенте REST, который я написал. Для веб-службы требуется OAuth, который я реализовал с помощью знака. Недавно веб-сервис внес 301 переадресации в конечные точки, которые также требуют oauth. Итак, я внедрил настраиваемую RedirectStrategy, которая строит новый запрос и подписывает его указательным указателем, как обычно. Однако первые две строки (в DefaultRequestDirector) сразу после того, как я верну свой новый запрос, устанавливают все заголовки тем, которые были отправлены в первоначальном запросе, эффективно уничтожая мой новый заголовок авторизации и вызывая отказ всех запросов на перенаправление.Заголовки перезаписываются при перенаправлении с использованием Apache HttpComponents
Кто-нибудь знает об этом? Я считал, что всегда возвращаю false в своем обычном RedirectStrategy и передал это в ResponseHandler, который я привязал к моему запросу, но нет тривиального способа восстановления запроса и отправки его обратно через надлежащего клиента.
Эти линии 1021-1023 в DefaultRequestDirector, где она вызывает к моему обычаю RedirectStrategy, а затем вытирает мои заголовки (Попробую ссылку на источник, в ближайшее время):
HttpUriRequest redirect = redirectStrategy.getRedirect(request, response, context);
HttpRequest orig = request.getOriginal();
redirect.setHeaders(orig.getAllHeaders());
Пол, спасибо за ваш ответ. К сожалению, я потратил некоторое время на попытку реализовать RequestInterceptor, и к моменту поступления запроса uri, который указатель использует для подписания запроса, был удален до того, что происходит после домена, в котором он ожидает полностью квалифицированного uri. Я предполагаю, что могу сделать копию перехваченного запроса (с полным uri), а затем скопировать заголовок авторизации на перехваченный запрос. Тем не менее, я беспокоюсь о хите производительности. Плюс, это просто кажется очень взломанным. –
Да, возможно, вам не удастся поместить его в запрос, вам, возможно, придется поместить его в сторону, а затем применить позже. Есть объект HttpContext, разве это не то, для чего он нужен? Кажется, что Javadoc предлагает так: https://svn.apache.org/repos/asf/httpcomponents/httpcore/tags/4.1.3/httpcore/src/main/java/org/apache/http/protocol/HttpContext.java , –
Блестящий! Почему я не подумал об этом? Можете ли вы отредактировать свой ответ и добавить этот комментарий, чтобы я мог отметить его как решенный? Спасибо! –