2016-12-01 3 views
0

Ich habe den folgenden CodeMuss ich den Antwortcode vom Server abrufen?

URL url = new URL(pushURL); 
HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
conn.setDoOutput(true); 
conn.setRequestMethod("POST"); 
conn.setRequestProperty("Content-Type", "application/restService"); 
conn.setConnectTimeout(30000); 
conn.setReadTimeout(30000); 
if(conn.getResponseCode() == 200){ 
    logger.debug("Success"); 
} else {     
    logger.debug("Time out set for 30 seconds"); 
} 
String input = writer.getBuffer().toString(); 
OutputStream os = conn.getOutputStream(); 

Wenn ich in der Antwort vom Server nicht daran interessiert bin, kann ich den folgenden Code entfernen?

if(conn.getResponseCode() == 200){ 
    logger.debug("Success"); 
} else {     
    logger.debug("Time out set for 30 seconds"); 
} 

Anbetracht dessen, dass der Code, in seiner Gesamtheit, wie es ist, ein java.net.ProtocolException verursacht, ist es eine Möglichkeit, noch die Antwort des Servers zu packen und conn.getOutputStream(); ausführen? In welcher Reihenfolge? Was sind die Konsequenzen, wenn man die Antwort abgesehen von den offensichtlichen Bedenken hinsichtlich der Berichterstattung nicht erhält?

Antwort

2

Das Problem ist, dass Sie Ihren Post gesendet haben, sobald Sie den Antwortcode erhalten haben. In Ihrem Code schreiben Sie nichts in den Ausgabestream, bevor Sie die Antwort erhalten. Sie senden im Wesentlichen nichts über den Post (nur diese Header-Informationen), bekommen den Antwortcode und versuchen dann erneut zu schreiben, was nicht erlaubt ist. Was Sie tun müssen, ist in den Ausgabestream schreiben zuerst, und dann den Antwortcode erhalten wie folgt:

public static void main(String[] args) throws IOException { 
    URL url = new URL(pushURL); 
    HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
    conn.setDoOutput(true); 
    conn.setRequestMethod("POST"); 
    conn.setRequestProperty("Content-Type", "application/restService"); 
    conn.setConnectTimeout(30000); 
    conn.setReadTimeout(30000); 
    String input = writer.getBuffer().toString(); 
    OutputStream os = conn.getOutputStream(); 
    for (char c : input.toCharArray()) { 
     os.write(c); 
    } 
    os.close(); 

    if(conn.getResponseCode() == 200){ 
     System.out.println("Success"); 
    } else {     
     System.out.println("Time out set for 30 seconds"); 
    } 
} 

hier ein kleines Tutorial:

Reading and Writing Tutorial

+0

Vielen Dank für die Antwort und Tutorial – Mushy

Verwandte Themen