java打印重定向的URL

时间:2014-09-26 17:17:53

标签: java url redirect

原始网址:http://pricecheckindia.com/go/store/ebay/52440?ref=velusliv

重定向的网址:http://www.ebay.in/itm/Asus-Zenfone-6-A600CG-A601CG-White-16-GB-/111471688863?pt=IN_Mobile_Phones&aff_source=DA

我需要一个程序来取original url并打印redirected url

如何在java中完成此任务。

public static void main(String[] args) throws IOException, InterruptedException
{
    String url = "http://pricecheckindia.com/go/store/ebay/52440?ref=velusliv";
    Response response = Jsoup.connect(url).followRedirects(false).execute();
    System.out.println(response.url());
}

1 个答案:

答案 0 :(得分:2)

您似乎正在通过JavaScript代码重定向,Jsoup不支持(它是简单的HTML解析器,而不是浏览器模拟器)。您的选择是使用支持Selenium网络驱动程序等JavaScript的工具,或者解析您的网页以从click here链接获取网址

  

如果重定向时间过长,请click here

文本。

您可以通过添加到当前代码

来使用Jsoup来获取此链接
Document doc = response.parse();
String redirectUrl = doc.select("a:contains(click here)").attr("href");
System.out.println(redirectUrl);

将返回并打印

  

http://rover.ebay.com/rover/1/4686-127726-2357-15/2?&site=Partnership_PRCCHK&aff_source=DA&mpre=http%3A%2F%2Fwww.ebay.in%2Fitm%2FAsus-Zenfone-6-A600CG-A601CG-White-16-GB-%2F111471688863%3Fpt%3DIN_Mobile_Phones%26aff_source%3DDA

所以现在我们需要做的就是从这个URL解析查询以获得mpre密钥的值,编码版本看起来像

  

http%3A%2F%2Fwww.ebay.in%2Fitm%2FAsus-Zenfone-6-A600CG-A601CG-White-16-GB-%2F111471688863%3Fpt%3DIN_Mobile_Phones%26aff_source%3DDA

但解码后它实际上代表

  

http://www.ebay.in/itm/Asus-Zenfone-6-A600CG-A601CG-White-16-GB-/111471688863?pt=IN_Mobile_Phones&aff_source=DA

要获取此密钥的值并对其进行解码,您可以使用此问题中的一种解决方案:Parse a URI String into Name-Value Collection。在前面提到的问题的接受答案的方法的帮助下,我们可以调用

URL address = new URL(redirectUrl);
Map<String,List<String>> urlQuerryMap= splitQuery(address);
String redirected = urlQuerryMap.get("mpre").get(0); 
System.out.println(redirected);

查看结果

  

http://www.ebay.in/itm/Asus-Zenfone-6-A600CG-A601CG-White-16-GB-/111471688863?pt=IN_Mobile_Phones&aff_source=DA