原始网址: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());
}
答案 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