URLConnection Timeoutエラー

このQ&Aのポイント
  • JavaのURLコネクションでのタイムアウトエラーについて調査中です
  • サーバ側の制限でない原因を突き止める必要があります。
  • 他のサーバのFlashは正常に取得できるため、問題は特定のFlashに関連しています。
回答を見る
  • ベストアンサー

URLConnection Timeoutエラー

あるWebサイトのあるコンテンツ(Flash)をJavaで取得しています。 Javaから、  URL url = new URL( "http://xxx/sample.swf" ); URLConnection conn = url.openConnection(); conn.connect(); ←ここで1分後に"connect timeout"になります。 ・同じマシンのブラウザから"http://xxx/sample.swf"は表示できます。(レスポンス早い) ・タイムアウト値は1分に設定しています。(30秒でも2分でも30分でも×) ・conn.getInputStreamでも"connect timeout"になります。 ・url.openStreamでも"connect timeout"になります。 ・このサーバのFlash以外の、別のサーバのFlashは問題なく取得できます。 何か原因は考えられますでしょうか? サーバ側でHTTPとIPの制限はしていません。 (ブラウザで見れるので↑の設定はあってると思うのですが・・。)

  • Java
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • _ranco_
  • ベストアンサー率58% (126/214)
回答No.1

ブラウザから以外のアクセスを拒絶するサイトもありますし、またそんなサイトでもuser-agentを詐称すればjava.netで自作したプログラムでアクセス成功!の場合もあります。setConnectTimeout()は試されましたか?

mozori01
質問者

お礼

ご回答ありがとうございます。 サーバ側のuser-agentの制限を調べてみたのですが、特に規制していませんでした。 タイムアウトの設定は30秒~30分まで試したのですがいずれもNGです。 リクエスト時の、サーバログを見たのですが、リクエスト自体来ていないようです。 ブラウザからは正常にみれるため、原因がわからない状態です・・・。

その他の回答 (1)

  • _ranco_
  • ベストアンサー率58% (126/214)
回答No.2

> リクエスト自体来ていない そうすると、常識的にはクライアント側のバグですね。 以下の、もっともシンプルなプログラムを動かしてみてください。 (このプログラムでリソースの取得ができることは、確認済みです。) これでだめなら、サーバの不具合ってことになりますね。 当方、現時点ではどっちのコードも設定も見ていないので、一般的なことしか言えません。 ----------------------------------------------------- import java.io.*; import java.net.*; public class GetUrlResource{ static final int BUFF_SIZE = 4096; public static void main(String [] args){ byte[] buffer = new byte[BUFF_SIZE]; String urlStr = "http://xxx/sample.swf"; String localFile = "sample.swf"; try{ URL url = new URL(urlStr); InputStream is = url.openStream(); FileOutputStream os = new FileOutputStream(localFile); getResource(is, os, buffer, BUFF_SIZE); is.close(); os.close(); } catch (MalformedURLException me){ me.printStackTrace(); } catch (IOException ie){ ie.printStackTrace(); } } static void getResource(InputStream is, OutputStream os, byte[] buffer, int bufsiz) throws IOException{ int n; while ((n = is.read(buffer)) != -1){ os.write(buffer, 0, n); } } } ----------------------------------------------------

mozori01
質問者

お礼

ご回答ありがとうございます。 当方も上記に似たクラスで実装しており、 別のサーバのコンテンツは取得可でした。 そこで色々調べてみたところ、途中のゲートウェイで、 送信リクエストを制限設定していたようでした。 設定を解除し、無事動くことを確認しました。 お騒がせしました。

関連するQ&A

  • LWPでtimeoutがうまくいかない

    LWPを使って外部と通信するプログラムを書きました。 通常時は希望通り動くのですが、相手のサーバが落ちている場合に エラーが戻るまで数分かかります。 ->timeoutの設定も入れたのですがききません。 URL先が落ちているときに、すばやくエラーが戻るようにしたいのですが、 どうしたらよいでしょうか? $server = "http://www.test.com"; $query{testid}="10"; $ua = new LWP::UserAgent; $ua->timeout(10); $request = POST($server, [%query]); $res = $ua->request($request); if (!$res->is_success) { print "Error\n"; exit 1; }

  • Tomcatから他サーバー接続時の遅延

    以下であるサーバーA(tomcat)からサーバーB(Apache)への 接続に時間がかかるということを下記で質問させて頂きました。 下記回答を受けてURLConnectionクラスの connect()で がボトルネックになっていることが判明したのですが謎が深まったので質問させてください。 http://okwave.jp/qa/q7637743.html 下記ソース(抜粋)をWebアプリ上(Tomcat6を使用)で実行しているのですがconnect()メソッドにて 時間がかかっています。 しかし、このロジックをコピペしてJavaのmain()関数でサーバーA上で実行させたところ サーバーBに遅延なく接続されました。 同様にPHPでサーバーAからサーバーBに接続させた時も遅延なくできました。 どうもサーバーAのTomcat6上で下記ソースが動作するときに遅延が発生するようです。 Tomcatが怪しいのかなと疑っているのですが Tomcatの設定で名前の解決(IPの逆引きを行う)などの設定? であったり 何か遅延の原因となるような設定など心当たりありますでしょうか。 ※サーバー管理者の方がパケットフィルタで観測したところサーバAからサーバーBへの パケットが放出されるまでに時間がかかっており放出されてからはすぐにサーバーBから レスポンスが返ってきているとのことでした。 【抜粋ソース】 apiUrl="http://192.168.1.15"; ← サーバーBへのURL(サーバAとBは同じLAN内) URL url = new URL(apiUrl); URLConnection con = url.openConnection(); con.setDoOutput(true); con.connect(); ← ここで時間がかかる

    • ベストアンサー
    • Java
  • Javaを使ったチャットシステムについて

    はじめまして。 チャットシステムを作ろうと思い他の方が制作されたソースコードを拝見させて頂いたのですがよくわかりませんでした。 よろしければ教えて頂けないでしょうか? よくわからなかったのは読込・書込処理の部分です。 どういう流れで会話のやり取りが行われているのかよくわかりません。 例えば、Aさんが書き込んでBさんがその書き込みを見るまで、のような一連の流れです。 ・読込処理 URL wi_url = new URL(p_url+"chat1.cgi"); URLConnection wi_connect = wi_url.openConnection(); wi_connect.setDoInput(true); wi_connect.setDoOutput(true); wi_connect.setUseCaches(false); OutputStream wo_stream = wi_connect.getOutputStream(); BufferedWriter wo_buffer = new BufferedWriter(new OutputStreamWriter(wo_stream)); wo_buffer.write("read", 0, 4); wo_buffer.flush(); wo_buffer.close(); InputStream wi_stream = wi_connect.getInputStream(); BufferedReader wi_buffer= new BufferedReader(new InputStreamReader(wi_stream)); ・書込処理 URL wo_url = new URL(p_url+"chat2.cgi"); URLConnection wo_connect = wo_url.openConnection(); wo_connect.setDoOutput(true); wo_connect.setDoInput(true); wo_connect.setUseCaches(false); OutputStream wo_stream = wo_connect.getOutputStream(); BufferedWriter wo_buffer = new BufferedWriter(new OutputStreamWriter(wo_stream)); wo_buffer.write(w_data, 0, w_data.length()); wo_buffer.flush(); wo_buffer.close(); InputStream wi_stream = wo_connect.getInputStream(); BufferedReader wi_buffer = new BufferedReader(new InputStreamReader(wi_stream));

  • ログイン認証についてjavaとブラウザとの違い。

    javaでセブンネットショッピングのサイトのログイン認証を行おうと思ったのですが最初の段階で躓いてしまいました。 下のプログラムはセブンネットのトップページの右上にあるログインボタンのURLにアクセスしレスポンスヘッダーを表示するものなのですが、そのヘッダーを見るとHTTP/1.1 200 OKと書いてあるにもかかわらず、そのURLをウェブブラウザに直接打ち込むとリダイレクトがかかり別のページに移動してしまいます。実際その時のヘッダーはHTTP/1.1 302 Foundと表示されています。 ブラウザとの間に何の違いがあるのでしょうか。 import java.io.IOException; import java.net.URL; import java.net.URLConnection; import java.util.Map; public class getHttp { public static void main(String[]args) throws IOException{ URL url = new URL("https://www.7netshopping.jp/secure.pl?l=http://www.7netshopping.jp/all/"); URLConnection connection = url.openConnection(); Map headers = connection.getHeaderFields(); for (Object key : headers.keySet()) { System.out.println(key + ": " + headers.get(key)); } } }

    • ベストアンサー
    • Java
  • JavaでSSL通信について(JDK131)

    Javaを用いてSSL通信を行いたいと思っています。 しかし、SSL通信を行うには「HTTPSURLConnection」が 必要で、JDK14以上となっています。 JDK131で利用するにはどうすれば可能でしょうか?? よろしくお願いします。 ちなみに、HTTPはこんな感じですよね?? ======================== import java.io.BufferedReader; import java.io.IOException; import java.io.OutputStream; import java.io.PrintStream; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import java.security.*; public class test { public static void main(String[] args) { String urlString = "https://XXX.cgi"; try { URL url = new URL(urlString); URLConnection uc = url.openConnection(); // POST可能にする uc.setDoOutput(true); // POST用のOutputStreamを取得 OutputStream os = uc.getOutputStream(); // POSTするデータ String postStr = "foo1=bar1&foo2=bar2"; // データをPOSTする PrintStream ps = new PrintStream(os); ps.print(postStr); ps.close(); } catch (MalformedURLException e) { System.err.println("Invalid URL format: "                    + urlString); System.exit(-1); } catch (IOException e) { System.err.println("Can't connect to "                    + urlString); System.exit(-1); } } }

  • Java(Servlet,JSP)を使用してあるURLにHTTPリクエスト(POST)を送信する方法

    あるWeb APIを使用したWEBアプリケーションを作成しています. JavaのServletやJSPで実装していますが,サンプルではGETでリクエストを送る方法だけが紹介されていました. APIがPOSTに対応しているので,POSTでリクエストを送信しようと思います. サンプルは以下のようになっていましたが,POSTでリクエストを送信する場合,どう変更すれば良いでしょうか? URL url = new URL("http://xxxxxx.xx/xx/?q=" + URLEncoder.encode(request.getParameter("data"), "UTF-8")); URLConnection con = url.openConnection(); InputStream stream = con.getInputStream(); リクエストは日本語を含むデータをパラメータに含める予定です.

    • ベストアンサー
    • Java
  • IIS5.1でCGI Timeoutになる原因を教えてください。

    Perlでプログラムを書きIIS 5.1で実行すると約5分程度で下記のようなメッセージでCGI Timeoutになってしまいます。 下記のURLの指示に従いIISのCGIスクリプトタイムアウト値は300秒から1800秒に延長しています(IIS5.1なのでGUIは少し違いますが)。 http://www.microsoft.com/japan/technet/community/columns/insider/iisi0302.mspx 原因を教えてください。 CGI Timeout The specified CGI application exceeded the allowed time for processing. The server has deleted the process. よろしくお願いします。

    • ベストアンサー
    • CGI
  • JavaでPOSTでデータ送信時のボディについて

    javaでHTTP通信をする際にメソッドをPOSTにしてボディにパラメータを設定する仕方がいまいちわかりません。 調べてみても、POSTはGETのようにURLに付加するのではなくボディ部に設定すればよいというのはわかったのですが。実際どういうソースで設定できるのか例が見つからなく困っています。 なんとなくの判断ですが、 message = "httpテスト"; URL url = new URL("http://~~~/xxx.html"); HttpURLConnection http = (HttpURLConnection)url.openConnection(); http.setRequestMethod("POST"); http.setDoOutput(true); http.setRequestProperty("Content-Type", "~~~"); http.setRequestProperty("Content-Length", Integer.toString(message.length())); ↓↓↓(1) BufferedWriter outer = new BufferedWriter(new OutputStreamWriter(http.getOutputStream())); outer.write(message); outer.flush(); outer.close(); ↑↑↑(1) http.connect(); 上記(1)の箇所でボディへの設定ができているのかなという判断をしているのですが、あっていますでしょうか?? よろしくお願いします。

    • ベストアンサー
    • Java
  • ニコニコ動画のクッキーの扱いについて(IE)

    ニコニコ動画のクッキーファイルを用いて、動画を閲覧させたいと思っています。 一般的に格納されている C:\Documents and Settings\username\Cookies から、username@nicovideo[n].jpファイルを開き、 user_session_xxxxxx_xxxxxxxxxxxxxxxxxxxxxx を取得しています。 上記のクッキーを用いて、ニコニコ動画Topにアクセスさせたのですが ログイン情報を取得できませんでした。(ログイン済み) 下記にソースの一部を抜粋しますので、「ここがおかしい」という点があればご教授お願い致します。 URL url = new URL("http://www.nicovideo.jp/"); HttpURLConnection conn = (HttpURLConnection)url.openConnection(); conn.setRequestMethod("GET"); conn.setRequestProperty("Referer","http://www.nicovideo.jp/"); conn.setRequestProperty("Cookie", cookieValue); //cookieValueはStrng型でcookieのuser_sessionが格納されている conn.setInstanceFollowRedirects(false); conn.connect(); InputStreamReader isr = new java.io.InputStreamReader(conn.getInputStream(), "UTF-8"); BufferedReader br = new java.io.BufferedReader(isr); String t = null; String line = null; hile (null != (line = br.readLine())) { t = t + line + "\n"; System.out.println(line); } 取得した結果は「ようこそゲストさん」となり、ログインした状態の内容を取得できていませんでした。

  • IEがFlashページをダウンロードしてしまおうとする

    Flashで作られたページ(xxx.swf)をIEで開こうとすると、 そのページをブラウザが開くのではなく 『ファイルのダウンロード “開く”“保存”』といった ファイルをDLするポップアップが出てきてしまい、 Flashページの表示が出来ません。 どうすれば普通にブラウザで表示されるようになるのでしょうか。 教えて下さい!!!

専門家に質問してみよう