我的代码(下面)试图获取从重定向的服务器返回的最终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