我的代碼(下面)試圖獲取從重定向的服務器返回的最終URL。只要URL具有http方案,它就可以正常工作。當我想用不同的方案返回一個URL時,我的問題就出現了。最終,我希望在某些情況下返回市場:// url或其他應用程序啓動計劃,因爲這是針對Android的,我希望啓動Intents。所以這就讓我儘可能檢索最終的http url,但是當最終的url是market時//它會拋出異常(java.lang.IllegalStateException:Scheme'market'未註冊),然後getURI沒有提供那個,它會提供之前的任何東西。使用非常規方案獲取重定向請求的最終URL
DefaultHttpClient client = new DefaultHttpClient();
HttpContext httpContext = new BasicHttpContext();
HttpGet httpGet = new HttpGet(mInitialUrl);
try {
client.execute(httpGet, httpContext);
} catch (IllegalStateException e) {
e.printStackTrace();
}
// Parse out the final uri.
HttpHost currentHost = (HttpHost) httpContext.getAttribute(ExecutionContext.HTTP_TARGET_HOST);
HttpUriRequest req = (HttpUriRequest) httpContext.getAttribute(ExecutionContext.HTTP_REQUEST);
return (req.getURI().isAbsolute()) ? req.getURI().toString() : (currentHost.toURI() + req.getURI());
現在,我可以只註冊市場://作爲一個方案,但我不想硬編碼事先什麼有效的方案是,我只是希望它接受他們,並返回他們爲所欲爲是。
任何想法?也許我甚至沒有采取正確的做法。 (在這種情況下,更改服務器行爲不是一種選擇...我必須處理重定向。)
我希望有人能告訴我如何讓HttpClient忽略該方案,或者至少保留它嘗試訪問的最終URI。
「URLConnection」的快速測試適用於我。你打算使用它嗎? – BalusC 2013-02-15 00:56:19
哦,是的。我會給你一個鏡頭。 – Turnsole 2013-02-15 17:08:51
好的。我發佈了一個答案。 – BalusC 2013-02-15 17:26:01