java - 使用 Apache HttpComponents 在重定向时覆盖 header

标签 java apache http

我正在使用 Apache HttpComponents(核心 - 4.1.3,httpclient 4.1.1)在我编写的 REST 客户端中发出 http 请求。 Web 服务需要 OAuth,我已经使用 signpost 实现了它。最近,Web 服务引入了 301 重定向到也需要 oauth 的端点。所以,我已经实现了一个自定义的 RedirectStrategy,它构建一个新的请求并用路标对其进行签名,就像我通常做的那样。但是,在我返回新请求后的前两行(在 DefaultRequestDirector 中)立即将所有 header 设置为初始请求中发送的 header ,有效地删除我的新授权 header 并导致所有重定向请求失败。

有人知道解决这个问题的方法吗?我考虑过总是在我的习惯中返回 false RedirectStrategy并将其交给 ResponseHandler我已经附加到我的请求中,但是没有简单的方法来重建请求并通过适当的客户端将其提交回来。

这些是 DefaultRequestDirector 中的第 1021-1023 行,它调用我的自定义 RedirectStrategy 然后删除我的标题(我将尝试链接到源,很快):

HttpUriRequest redirect = redirectStrategy.getRedirect(request, response, context);
HttpRequest orig = request.getOriginal();
redirect.setHeaders(orig.getAllHeaders());

最佳答案

我在这里有点猜测,但如果您所指的代码是行 349 of DefaultRequestDirector ,然后在第 452 行的更下方调用了 requestExec.preProcess(wrapper, httpProcessor, context)

是否可以在这里注册一个签署请求的处理器?

如果没有,BasicHttpProcessor (这可能是这里使用的处理器)允许您注册允许您参与请求预处理的拦截器。

这可能是签署请求的另一种选择。

或者,有一个 HttpContext目的。该对象的 Javadoc 建议它可用于保存请求的上下文数据,并且您的数据符合此描述。所以把它停在那里,以后需要时再取。

关于java - 使用 Apache HttpComponents 在重定向时覆盖 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7420980/

相关文章:

java - Spring setDisallowedFields 不起作用

java - Android,如何在点击时显示软件键盘

django -/在尝试写入只读数据库时出现OperationalError

android - 如何在使用由 Apache 提供支持的库的 Android 应用程序中添加 Apache License 2.0

java - 分块传输编码时如何使用 HttpsUrlconnection 读取响应

c# - 重现问题 : The http request was forbidden with client authentication scheme 'anonymous'

java - 无法将 '' 解析为整数,然后退出

java - 没有附加适配器,在 fragment 中使用 reyclerview 和 json 跳过布局

python - 为什么我应该使用 `mod_wsgi` 而不是通过 python 启动?

http - 使用不同的方法访问一个 mercurial repo