2017-02-06 26 views
0

У меня есть этот адрес http://www.zara.com/qr/1260020210042, и я пытаюсь получить перенаправлены окончательный URL:Как обрабатывать JavaScript перенаправляет в jsoup

String url = "http://www.zara.com/qr/1260020210042"; 
    Response response = Jsoup.connect(url).followRedirects(true).execute();  
    String url2 = response.url().toString(); 
    Response response2 = Jsoup.connect(url2).followRedirects(true).execute(); 
    System.out.println(response2.url()); 

но не печатает окончательный перенаправлены URL-адрес, что я должен изменить? Спасибо,

EDIT:

Я попытался также с HtmlUnit, но это не дает мне последнее звено, которое мне нужно:

 WebClient webClient = new WebClient(BrowserVersion.FIREFOX_45); 
     webClient.getOptions().setJavaScriptEnabled(true); 
     webClient.getOptions().setRedirectEnabled(true); 
     webClient.getOptions().setThrowExceptionOnScriptError(false); 
     webClient.getOptions().setCssEnabled(true);  
     HtmlPage page = (HtmlPage) webClient.getPage("http://www.zara.com/qr/1260020210042"); 
     WebResponse response = page.getWebResponse(); 
     String content = response.getContentAsString(); 
     System.out.println(page.getUrl()); 
+0

Мне кажется, что http://www.zara.com/qr/1260020210042 не перенаправляется вообще. Он возвращает 200 OK. –

+0

да, но если вы нажмете на ссылку, это будет –

+0

Тогда, вероятно, это связано с js. Попробуйте с помощью HtmlUnit, а затем используйте перенаправленный URL-адрес с jsoup. –

ответ

1

HtmlUnit решение, предложенное Фредерик Клейн на самом деле работает хорошо, но есть предостережение, связанное с cookie, см. комментарий «обновить» ниже.

Сначала добавьте эту зависимость в конфигурации Maven:

<dependency> 
    <groupId>net.sourceforge.htmlunit</groupId> 
    <artifactId>htmlunit</artifactId> 
    <version>2.25</version> 
</dependency> 

Затем использовать его как это:

package de.scrum_master.stackoverflow; 

import com.gargoylesoftware.htmlunit.WebClient; 
import com.gargoylesoftware.htmlunit.WebClientOptions; 
import org.jsoup.Connection.Response; 
import org.jsoup.Jsoup; 

import java.io.IOException; 
import java.net.MalformedURLException; 
import java.net.URL; 

import static com.gargoylesoftware.htmlunit.BrowserVersion.CHROME; 
import static java.util.logging.Level.OFF; 
import static java.util.logging.Logger.getLogger; 

public class Application { 
    public static void main(String[] args) throws IOException { 
    WebClient webClient = createWebClient(); 
    String originalURL = "http://www.zara.com/qr/1260020210042"; 
    String redirectedURL = webClient.getPage(originalURL).getUrl().toString(); 
    Response response = Jsoup.connect(redirectedURL).execute(); 
    System.out.println(response.url()); 
    } 

    private static WebClient createWebClient() throws MalformedURLException { 
    getLogger("com.gargoylesoftware").setLevel(OFF); 
    WebClient webClient = new WebClient(CHROME); 
    WebClientOptions options = webClient.getOptions(); 
    options.setJavaScriptEnabled(true); 
    options.setRedirectEnabled(true); 
    // IMPORTANT: Without the country/language selection cookie the redirection does not work! 
    webClient.addCookie("storepath=us/en", new URL("http://www.zara.com/"), null); 
    return webClient; 
    } 
} 

Журнал консоли говорит:

http://www.zara.com/us/en/man/shoes/leather/brown-braided-leather-ankle-boots-c0p4065286.html 

UPDA te: Хорошо, я нашел основную причину вашей проблемы. Это не HtmlUnit, а тот факт, что перенаправление на zara.com просто не работает, прежде чем пользователь вручную выбирает страну + язык во время своего первого посещения с любым браузером. Информация хранится в файле cookie с именем storefront, без которого каждый сеанс браузера всегда будет появляться на первой странице с диалогом выбора страны. Я обновил свой примерный код, чтобы установить этот файл cookie в USA + English. Тогда это работает.

Наслаждайтесь!

+0

Проблема в том, что реальный браузер ведет себя одинаково. Попробуйте браузер с удаленными куки-файлами и кешем. Когда вы открываете URL-адрес, вам сначала нужно выбрать страну и нажать «ОК». Затем вы перенаправляетесь на страницу с ошибкой, что является проблемой на самой странице Zara. Только тогда, если вы откроете тот же URL-адрес в следующий раз, он будет работать. Браузер, такой как HtmlUnit, который всегда начинается с нового сеанса, не имеет этих файлов cookie, поэтому он просто не может работать, потому что вы имитируете нового пользователя. HtmlUnit просто ведет себя, как обычный браузер, для нового пользователя, попробуйте сами! – kriegaex

+0

Хорошо, я обновил ответ, теперь он работает. Вы можете видеть, что вам нужен определенный файл cookie и как его установить в HtmlUnit. – kriegaex

+0

столько усилий, чтобы помочь. Очень хорошо сделано. +1 – luksch