2016-03-19 18 views
1

次のメソッドは正常に動作しますが、サーバーが403コードを返すと例外がスローされ、サーバーの応答が返されません。HttpUrlConnectionでデータが不正なhttpコードであっても取得403. 404など

public String ping(String lat, String lon) 
{ 
    StringBuffer response = null; 
    try 
    { 
     String url = "https://api.mysite.com"; 
     URL urlObj = new URL(url); 
     HttpsURLConnection con = null; 
     if (useProxy) 
     { 
      con = (HttpsURLConnection) urlObj.openConnection(proxy); 
     } 
     else 
     { 
      con = (HttpsURLConnection) urlObj.openConnection(); 
     } 

     // add reuqest header 
     con.setRequestMethod("POST"); 
     con.setRequestProperty("User-Agent", USER_AGENT); 
     con.setRequestProperty("Content-Type", "application/json; charset=utf-8"); 
     con.setRequestProperty("Host", urlObj.getHost()); 
     con.setRequestProperty("Connection", "Keep-Alive"); 
     // con.setRequestProperty("Accept-Encoding", "gzip"); 

     String urlParameters = "{\"lat\":" + lat + ",\"lon\":" + lon + "}"; 

     // Send post request 
     con.setDoOutput(true); 
     DataOutputStream wr = new DataOutputStream(con.getOutputStream()); 
     wr.writeBytes(urlParameters); 
     wr.flush(); 
     wr.close(); 

     int responseCode = con.getResponseCode(); 
     // System.out.println("\nSending 'POST' request to URL : " + url); 
     // System.out.println("Post parameters : " + urlParameters); 
     // System.out.println("Response Code : " + responseCode); 

     BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream())); 
     String inputLine; 
     response = new StringBuffer(); 

     while ((inputLine = in.readLine()) != null) 
     { 
      response.append(inputLine); 
     } 
     in.close(); 

     // print result 
     // System.out.println(response.toString()); 
    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 

    return response.toString(); 
} 

は、どのように私はこれがどんなサーバーが返すとサーバは403コード(またはその他の応答コード)で応答しても、サーバの応答を返さないことができますか?

+2

私はあなたの質問が正しい場合、これがあなたが探しているものだと私は信じています。あなたは 'con.getResponseCode();'を使ってレスポンスコードをチェックすることができます。成功コード 'HttpURLConnection.HTTP_OK'なら' con.getInputStream() 'を使ってデータを読むことができます。そうでなければ' con.getErrorStream () 'を呼び出してエラーメッセージを読み込みます。 –

答えて

1

あなただけの以下のようなコードをより堅牢にするためにifブロックを追加する必要があります。

public String ping(String lat, String lon) 
{ 
    StringBuffer response = null; 
    try 
    { 
     String url = "https://api.mysite.com"; 
     URL urlObj = new URL(url); 
     HttpsURLConnection con = null; 
     if (useProxy) 
     { 
      con = (HttpsURLConnection) urlObj.openConnection(proxy); 
     } 
     else 
     { 
      con = (HttpsURLConnection) urlObj.openConnection(); 
     } 

     // add reuqest header 
     con.setRequestMethod("POST"); 
     con.setRequestProperty("User-Agent", USER_AGENT); 
     con.setRequestProperty("Content-Type", "application/json; charset=utf-8"); 
     con.setRequestProperty("Host", urlObj.getHost()); 
     con.setRequestProperty("Connection", "Keep-Alive"); 
     // con.setRequestProperty("Accept-Encoding", "gzip"); 

     String urlParameters = "{\"lat\":" + lat + ",\"lon\":" + lon + "}"; 

     // Send post request 
     con.setDoOutput(true); 
     DataOutputStream wr = new DataOutputStream(con.getOutputStream()); 
     wr.writeBytes(urlParameters); 
     wr.flush(); 
     wr.close(); 

     int responseCode = con.getResponseCode(); 
     if (responseCode == HttpURLConnection.HTTP_OK) { 
      response = readResponse(con.getInputStream()); 

     } else { 
      response = readResponse(con.getErrorStream()); 
     }  

     // print result 
     System.out.println(response.toString()); 
    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 

    return response.toString(); 
} 

private StringBuffer readResponse(InputStream in) { 
    BufferedReader in = new BufferedReader(new InputStreamReader(in)); 
     String inputLine; 
     StringBuffer response = new StringBuffer(); 

     while ((inputLine = in.readLine()) != null) 
     { 
      response.append(inputLine); 
     } 
     in.close(); 

    return response; 

} 

HTH。

関連する問題