使用非常规方案获取重定向请求的最终URL

我的代码(下面)尝试从服务器返回的最终URL进行一些重定向。 只要URL具有http方案,它就可以正常工作。 当我想要返回具有不同方案的URL时,我的问题出现了。 最终,我希望在某些情况下返回market:// url或其他应用程序启动方案,因为这是针对Android的,我想要与它们一起启动Intent。

所以这让我得到了最终的http url,但是当最终的url是market://它会抛出看到的exception(java.lang.IllegalStateException:Scheme’market’未注册),然后getURI不提供那个,它会提供之前的任何东西。

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()); 

现在,我可以注册market://作为一个方案,但我不想事先硬编码有效的方案是什么,我只是希望它接受它们并将它们返回给它们。

有任何想法吗? 也许我甚至没有采取正确的方法。 (在这种情况下,更改服务器行为不是一个选项…我必须处理重定向。)

我希望有人可以告诉我如何让HttpClient忽略该方案,或者至少保留它试图访问的最终URI。

使用HttpURLConnection为我的工作。 当目标资源不是HTTP资源时,以下重定向会毫无例外地停止。

 HttpURLConnection connection = (HttpURLConnection) new URL(mInitialUrl).openConnection(); connection.setInstanceFollowRedirects(true); String location = connection.getHeaderField("location");