我的代码(如下)试图获取从进行一些重定向的服务器返回的最终 URL。只要 URL 具有 http 方案,它就可以正常工作。当我想用不同的方案返回一个 URL 时,我的问题就出现了。最终,在某些情况下,我希望返回一个 market:// url 或其他应用程序启动方案,因为这是针对 Android 的,我想用它们启动 Intents。
所以这让我可以检索最终的 http url,但是当最终的 url 是 market:// 时,它会抛出异常(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。