シナリオで問題を説明しましょう:
1)ユーザーは私のページ「www.proxy4html.com」にアクセスし、フォームに記入します:
web-address: |www.google.co.in |
2) [送信] をクリックします。
3) ブラウザのアドレスバーに「www.proxy4html.com」を含む Google ホームページを取得します。
Web からコンテンツを取得するために、java.net.HttpURLConnectionを使用しています (これを解決するために、他のいくつかのオプションも試しました)。スタンドアロンで実行する場合、コードは期待どおりに機能します
(つまり、 public static void main(String...)..スレッドを実行しているときに、指定された Web アドレスの html が何であれフェッチされます)。
しかし、スローするサーブレット環境で実行する場合も同じです
java.net.ConnectException: 接続タイムアウト: 接続
コードは次のとおりです。
public void write(String urlString, PrintWriter writer) {
URL url;
try {
url = new URL(urlString);
HttpURLConnection huc = (HttpURLConnection) url.openConnection();
HttpURLConnection.setFollowRedirects(false);
huc.setConnectTimeout(15 * 1000 * 60);
huc.setReadTimeout(15 * 1000 * 60);
huc.setRequestMethod("GET");
huc.connect();
InputStream input = url.openStream();
logger.info("got input stream");//I never reach here in servlet env :(
int i = 0;
while((i = input.read()) != -1) {
writer.write(i);
System.out.print((char)i);
}
input.close();
} catch (ConnectException e) {
logger.log(Level.SEVERE, "", e);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
上記のコード例はきれいに見えないかもしれませんが、上記のメソッドが適切なURL (および任意の出力ストリーム) を渡してサーブレットから呼び出されると、接続が確立されないことに注意してください。
これはすべて、企業ネットワークにあるローカルマシン上のTomcatで実行しています(同じコードがpsvmainで実行されているため、ファイアウォールに関する結論は得たくないかもしれません)。
助けてください....
前もって感謝します。
編集:家で同じことを試してみましたが、期待どおりにうまくいきました。この質問は、Java ではなくオペレーティング システムのドメインに当てはまると思います。だから私はもう一度私の質問を言い換えたいと思います:
- オペレーティング システム (Windows 7) が何らかの形で tomcat による Http リクエストの作成を妨げていますか?
- アプリケーションがブラウザ以外のHttpリクエストを作成できないようにするWindows 7の下の構成はありますか?
- Mozilla Firefox (インストールではなくコピーされたディレクトリから実行しています。つまり、管理者権限がなく、ウィンドウ レジストリがない可能性があります) が定期的に更新できないことがあります。