【发布时间】:2020-05-12 17:36:15
【问题描述】:
我想使用 java 找到这些类型的链接的最终 URL。它们不是诸如 bit.ly 或 goo.gl 之类的短链接,而是包含在另一个 URL 中的 URL。
这是我想取消缩短的链接类型。
如何检索 Schuh URL?
非常感谢您的帮助。
【问题讨论】:
-
你应该得到重定向网址:stackoverflow.com/a/5204670/6750327
我想使用 java 找到这些类型的链接的最终 URL。它们不是诸如 bit.ly 或 goo.gl 之类的短链接,而是包含在另一个 URL 中的 URL。
这是我想取消缩短的链接类型。
如何检索 Schuh URL?
非常感谢您的帮助。
【问题讨论】:
您需要在 url 上执行请求,允许跟随重定向,然后获取结果 url。
像这样:
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import java.io.IOException;
public class UrlRetriever {
private final OkHttpClient httpClient;
public UrlRetriever(OkHttpClient httpClient) {
this.httpClient = httpClient;
}
public String getRootUrl(String url) {
try (Response response = httpClient.newCall(buildRequest(url)).execute()) {
String sourceUrl = response.request().url().toString();
return sourceUrl;
} catch (IOException e) {
System.err.println("Url retrieval failed for " + url + " (returning self), reason: " + e.getMessage());
return url;
}
}
private Request buildRequest(String url) {
try {
return new Request.Builder()
.head()
// Act like a browser, because Medium (and maybe others) don't redirect correctly otherwise
.header("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36")
.url(url)
.build();
} catch (IllegalArgumentException e) {
System.err.println("Url retrieval failed for " + url + ". reason: " + e.getMessage());
throw e;
}
}
}
【讨论】: