Jsoup 获取重定向的 URL

2022-09-04 06:54:09

我正在尝试从url缩短器提供的URL中获取实际的(重定向的)url。

让我们以twitter url缩短器为例。我能够获取响应对象也解析它以获取文档。

Response response = Jsoup.connect("http://t.co/i5dE1K4vSs")
                .followRedirects(true) //to follow redirects
                .execute();

现在,考虑单个重定向,从哪里获取最终网址?有什么方法或策略可以实现这一目标吗?


答案 1

响应对象有一个 url() 方法,它应该给你最终的 url。所以你可以这样做

String url = "http://t.co/i5dE1K4vSs";
Response response = Jsoup.connect(url).followRedirects(true).execute();
System.out.println(response.url())

如果你想得到中间重定向,你应该关闭跟随重定向,然后检查标题“位置”。例如

String url = "http://t.co/i5dE1K4vSs";
Response response = Jsoup.connect(url).followRedirects(false).execute();
System.out.println(response.header("location"));

如果它有多个重定向,您需要递归调用URL。


答案 2

法典:

String originalUrl = Jsoup.connect("http://t.co/i5dE1K4vSs")
                        .followRedirects(true) //to follow redirects
                        .execute().url().toExternalForm();
System.out.println(originalUrl);

输出:

http://ibnlive.in.com/news/messi-considered-move-to-arsenal/487799-5-21.html

解释:

由于 has 作为超接口,您可以只使用它的 #url() 方法(然后根据需要使用对象)。Connection.ResponseConnection.BaseURL


推荐