2016-03-19 18 views
1

Aşağıdakiler işe yarar, ancak sunucu 403 kodu döndürdüğünde, sunucu yanıtını hiçbir zaman döndürme yöntemiyle sonuçlanan bir istisna atar.HttpUrlConnection ile ilgili verileri http 253.404, vb. Ile birlikte HttpUrlConnection ile geri alma

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(); 
} 

Nasıl bu olursa olsun sunucu yanıtını dönmek yapabilir ne sunucu döndürür ve sunucu 403 koduyla (veya başka bir tepki kodu) ile yanıt bile?

+2

Sorunuzu doğru bulursanız, aradığınız şeyin bu olduğuna inanıyorum. Cevap kodunu 'con.getResponseCode();' kullanarak kontrol edebilirsiniz ve eğer başarı kodu 'HttpURLConnection.HTTP_OK' ise verileri okumak için' con.getInputStream() 'kullanabilir ya da' con.getErrorStream’i kullanabilirsiniz.() 'hata mesajını okumak için. –

cevap

1

Bunu yalnızca aşağıda gibi kod daha sağlam hale getirmek için bir if blok eklemek gerekir:

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.