有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java打印重定向的url

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

重定向的url: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) 个答案

  1. # 1 楼答案

    看起来您是通过JavaScript代码重定向的,Jsoup不支持JavaScript代码(它是简单的HTML解析器,而不是浏览器模拟器)。然后,您可以选择使用支持类似于Selenium web驱动程序的JavaScript的工具,或者解析页面以从click here链接获取url

    If it is taking too long to redirect, then please 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