我使用Apache HttpComponents(核心 - 4.1.3,httpclient 4.1.1)在我寫的REST客戶端中發出http請求。網絡服務需要使用路標實現的OAuth。最近,web服務已經將301重定向引入了也需要oauth的端點。所以,我已經實現了一個自定義的RedirectStrategy,它構建了一個新的請求並使用路標對其進行簽名,就像我通常做的那樣。但是,在我返回新請求之後,前兩行(位於DefaultRequestDirector)將所有標題設置爲初始請求中發送的所有標題,有效地擦除了我的新授權標頭並導致所有重定向請求失敗。使用Apache HttpComponents重定向的標題
有沒有人知道解決這個問題的方法?我認爲在我的自定義RedirectStrategy中總是返回false,並將其附加到我已附加到我的請求中的ResponseHandler中,但重構請求並通過正確的客戶端提交它的方法並不重要。
這些都是在它調用我的自定義RedirectStrategy的DefaultRequestDirector線1021年至1023年,然後抹我的頭(我會嘗試鏈接到源,不久):
HttpUriRequest redirect = redirectStrategy.getRedirect(request, response, context);
HttpRequest orig = request.getOriginal();
redirect.setHeaders(orig.getAllHeaders());
Paul,謝謝你的回答。不幸的是,我花了一些時間試圖實現一個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 。 –
太棒了!爲什麼我沒有想到這個?你可以編輯你的答案並添加此評論,以便我可以將其標記爲已解決?非常感謝! –