2

こんにちは、URI がサーバー リダイレクトによって解決されるページを解析する必要があります。

例:

http://www.juventus.com/wps/poc?uri=wcm:oid:91da6dbb-4089-49c0-a1df-3a56671b7020がリダイレクトされましたhttp://www.juventus.com/wps/wcm/connect/ JUVECOM-IT/news/primavera%20convocati%20villar%20news%2010agosto2013?pragma=no-cache

これは、解析する必要があるページの URI です。問題は、リダイレクト URI にスペースが含まれていることです。これがコードです。

    String url = "http://www.juventus.com/wps/poc?uri=wcm:oid:91da6dbb-4089-49c0-a1df-3a56671b7020";
    Document doc = Jsoup.connect(url).get();

    Element img = doc.select(".juveShareImage").first();
    String imgurl = img.absUrl("src");
    System.out.println(imgurl);

2 行目に次のエラーが表示されます。

    Exception in thread "main" org.jsoup.HttpStatusException: HTTP error fetching URL. Status=404, URL=http://www.juventus.com/wps/wcm/connect/JUVECOM-IT/news/primavera convocati villar news 10agosto2013?pragma=no-cache

これは、リダイレクトされた URL を含むため、JSoup が正しいリダイレクトされた URI を取得することを意味します。問題なく解析できるように、「 」を %20 に置き換える方法はありますか?

ありがとう!

4

2 に答える 2

2

あなたが正しいです。これが問題です。私が見る唯一の解決策は、リダイレクトのマニュアルを実行することです。私はあなたのためにこれを行うこの小さな再帰的メソッドを書きました。見る:

public static void main(String[] args) throws IOException
{
    String url = "http://www.juventus.com/wps/poc?uri=wcm:oid:91da6dbb-4089-49c0-a1df-3a56671b7020";

    Document document = manualRedirectHandler(url);

    Elements elements = document.getElementsByClass("juveShareImage");

    for (Element element : elements)
    {
        System.out.println(element.attr("src"));
    }

}

private static Document manualRedirectHandler(String url) throws IOException
{
    Response response = Jsoup.connect(url.replaceAll(" ", "%20")).followRedirects(false).execute();
    int status = response.statusCode();

    if (status == HttpURLConnection.HTTP_MOVED_TEMP || status == HttpURLConnection.HTTP_MOVED_PERM || status == HttpURLConnection.HTTP_SEE_OTHER)
    {
        String redirectUrl = response.header("location");
        System.out.println("Redirect to: " + redirectUrl);
        return manuelRedirectHandler(redirectUrl);
    }

    return Jsoup.parse(response.body());
}

これはあなたを印刷します

Redirect to: http://www.juventus.com:80/wps/portal/!ut/p/b0/DcdJDoAgEATAF00GXFC8-QqVWwMuJLLEGP2-1q3Y8Mwm4Qk77pATzv_L6-KQgx-09FDeWmpEr6nRThCk36hGq1QnbScqwRMbNuXCHsFLyuTgjpVLjOMHyfCBUg!!/
Redirect to: http://www.juventus.com/wps/wcm/connect/JUVECOM-IT/news/primavera convocati villar news 10agosto2013?pragma=no-cache
/resources/images/news/inlined/42d386ef-1443-488d-8f3e-583b1e5eef61.jpg

そのための Jsoup のパッチも追加しました。

于 2013-08-21T21:56:28.337 に答える