2014-07-23 19 views
7

Tôi đang cố tìm nạp url thực (được chuyển hướng) từ URL được cung cấp bởi trình rút gọn url.Jsoup được chuyển hướng URL

Hãy sử dụng trình rút gọn url twitter chẳng hạn. Tôi có thể nhận được đối tượng phản hồi cũng phân tích cú pháp nó để lấy tài liệu.

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

Bây giờ, xem xét một chuyển hướng, nơi để nhận url cuối cùng? Bất kỳ phương pháp hay chiến lược nào để đạt được điều này?

+0

Tôi nghĩ lớp 'Connection.Base' có phương thức' url() ' – Anton

+0

Bạn muốn nhận url cuối cùng hoặc tất cả chuyển hướng? –

+0

URL cuối cùng. Tất cả các url trung gian cũng không bị tổn thương. – Sorter

Trả lời

13

Đối tượng Response có phương thức url() sẽ cung cấp cho bạn url cuối cùng. Vì vậy, bạn có thể làm như

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

Nếu bạn muốn chuyển hướng trung gian, bạn nên tắt theo sau chuyển hướng rồi kiểm tra "vị trí" tiêu đề. Ví dụ:

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

Nếu có nhiều chuyển hướng bạn cần phải gọi lại một cách đệ quy các url.

1

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 

Giải thích:

Khi Connection.ResponseConnection.Base như superinterface, bạn chỉ có thể sử dụng phương pháp #URL() của nó (và sau đó sử dụng đối tượng URL như bạn muốn.

Các vấn đề liên quan