36

次のようなコードで簡単なURLリクエストを作成しています。

URL url = new URL(webpage);
URLConnection urlConnection = url.openConnection();
InputStream is = urlConnection.getInputStream();

しかし、その最後の行で、「リダイレクトが多すぎるエラー」が発生しています。たとえば、「ウェブページ」変数がgoogle.comの場合は正常に機能しますが、サーブレットのURLを使用しようとすると失敗します。これでリダイレクト(デフォルトは20)に従う回数を調整できるようです:

System.setProperty("http.maxRedirects", "100");

しかし、たとえば100まで上げると、エラーをスローするのに間違いなく時間がかかるので、試行していることがわかります。ただし、サーブレットへのURLは(任意の)ブラウザで正常に機能し、firebugで「persist」オプションを使用するとリダイレクトされるのは1回だけのようです。

私のサーブレットに関するもう少し情報...それはtomcatで実行されており、'mod-proxy-ajp'を使用してapacheが前面にあります。また、フォーム認証を使用しているため、入力したURLはすべてログインページにリダイレクトされることに注意してください。私が言ったように、これはすべてのブラウザで正しく機能しますが、何らかの理由でリダイレクトがJava6のURLConnectionで機能していません。

読んでくれてありがとう...アイデア?

4

4 に答える 4

50

ユーザーセッションを維持していないため、無限ループでリダイレクトしているようです。セッションは通常、Cookie によってサポートされます。CookieManagerを使用する前にを作成する必要がありますURLConnection

// First set the default cookie manager.
CookieHandler.setDefault(new CookieManager(null, CookiePolicy.ACCEPT_ALL));

// All the following subsequent URLConnections will use the same cookie manager.
URLConnection connection = new URL(url).openConnection();
// ...

connection = new URL(url).openConnection();
// ...

connection = new URL(url).openConnection();
// ...

以下も参照してください。

于 2012-06-14T15:56:46.530 に答える
5

Duse、次の行を追加しました:

java.net.CookieManager cm = new java.net.CookieManager();
java.net.CookieHandler.setDefault(cm);

次の例を参照してください。

java.net.CookieManager cm = new java.net.CookieManager();
java.net.CookieHandler.setDefault(cm);
String buf="";
dk = new DAKABrowser(input.getText());
try {
    URL url = new URL(dk.toURL(input.getText()));
    DataInputStream dis = new DataInputStream(url.openStream());
    String inputLine;
    while ((inputLine = dis.readLine()) != null) {
        buf+=inputLine;
        output.append(inputLine+"\n");
    }
    dis.close();
} 
catch (MalformedURLException me) {
    System.out.println("MalformedURLException: " + me);
}
catch (IOException ioe) {
    System.out.println("IOException: " + ioe);
}
titulo.setText(dk.getTitle(buf));
于 2013-02-20T22:29:57.630 に答える
1

Unix環境のTomcat6でJenkinsを使用していて、このバグが発生しました。何らかの理由で、Java7にアップグレードすると解決しました。なぜそれが修正されたのかを正確に知りたいと思います。

于 2014-02-20T18:18:01.820 に答える