Jsoup get redirected URL
Asked Answered
P

2

13

I'm trying to fetch the actual(redirected) url from the one provided by a url shortener.

Let's take twitter url shortener for example. I'm able to get the response object also parsed it to get the document.

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

Now, considering a single redirect, where to get the final url from? Any method or strategy to achieve this?

Puerperal answered 23/7, 2014 at 10:18 Comment(3)
I think the Connection.Base class has an url() methodTrudeau
You want to get the final url or all the redirects?Sajovich
Final Url. All the intermediate urls won't hurt either.Puerperal
S
28

The Response object has a url() method which should give you the final url. So you could do like

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

If you want o get the intermediate redirects you should turn follow redirect off and then check for header "location". Eg

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

If it has multiple redirect you need to recurssively call the urls.

Sajovich answered 23/7, 2014 at 10:33 Comment(0)
T
2

Code:

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

Output:

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

Explanation:

As the Connection.Response has Connection.Base as superinterface, you can just use the #url() method of it (and then use the URL object as you want.

Trudeau answered 23/7, 2014 at 10:29 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.