2016-10-09 5 views
8

java.net.HttpURLConnectionを作成し、接続タイムアウトを設定してもconnection.connect()にハングアップします。 "b4 connect"はログに記録され、 "after connect"はログに記録されません。私はAPI 21以上でテストしましたが、問題はありますが、API 16-19のテストでこの問題が発生します。以下は私のコードです。リクエストはhttpsを使用しており、バックエンドは標準のnginx https設定を使用しています。接続タイムアウトを設定しても、HTTPS要求が20未満のAndroid APIでハングする

 URL url = new URL(urlString); 
     HttpURLConnection connection = (HttpURLConnection)url.openConnection(); 

     try { 
      connection.setRequestMethod("GET"); 
      connection.setRequestProperty("charset", "utf-8"); 
      connection.setRequestProperty("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36"); 
      connection.setConnectTimeout('\uea60'); 
      connection.setReadTimeout('\uea60'); 

      connection.setInstanceFollowRedirects(false); 
      Log.d(TAG, "b4 connect"); 
      connection.connect(); 
      Log.d(TAG, "after connect"); 
      if(connection.getResponseCode() == 200) { 
       return IOUtils.toString(connection.getInputStream(), "UTF-8"); 
      } 

     } catch (Exception var) { 
      throw new Exception(var.getMessage()); 
     } finally { 
      connection.disconnect(); 
     } 
     return null; 
+0

URLが「https」の場合は、代わりに「HttpsURLConnection」を使用します。 –

+0

いいですが、私はそれを試みましたが、私はまだこの問題があります。 – user299648

+0

これを試すhttp://stackoverflow.com/a/8655039/2311117 – Shivansh

答えて

6
  1. あなたは、いくつかのユニコードcharachtersを使用してtimoutsを指定しています。

    connection.setConnectTimeout(30000); 
    сonnection.setReadTimeout(30000); 
    
  2. 「接続後に」タイムアウトに記録されないように注意してください。代わりに例外がスローされます。

+0

キャッチしてくれてありがとう、タイムアウトを30000に設定した後、私はまだ例外メッセージ "接続がピアによって閉じられました"を返します – user299648

+0

@ user299648これは以前言われたようにもうハングしませんか?おそらくそれはそうするべきだ。 – Fedor

関連する問題