gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 03:08:20 25 4
gpt4 key购买 nike

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

所以这让我尽可能检索最终的 http url,但是当最终的 url 是 market://它抛出异常看到(java.lang.IllegalStateException:Scheme 'market' not registered),然后 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 资源时,以下重定向无一异常(exception)地停止。

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

关于java - 使用非常规方案获取重定向请求的最终 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14886313/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com