2016-12-01 2 views
0

J'ai le code suivantDois-je obtenir le code de réponse du serveur?

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

Si je ne suis pas intéressé par la réponse du serveur, puis-je supprimer le code suivant?

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

Considérant que le code, dans son intégralité comme il est, provoque une java.net.ProtocolException, est-il un moyen de saisir toujours la réponse du serveur et exécuter conn.getOutputStream();? Dans quel ordre? Quelles sont les conséquences de ne pas obtenir la réponse en dehors des préoccupations évidentes de déclaration?

Répondre

2

Le problème est qu'une fois que vous obtenez le code de réponse, vous avez envoyé votre message. Dans votre code, vous n'écrivez rien dans le flux de sortie avant d'avoir la réponse. Ainsi, vous n'envoyez essentiellement rien sur la publication (juste cette information d'en-tête), obtenant le code de réponse, et essayant alors d'écrire à nouveau, ce qui n'est pas permis. Ce que vous devez faire est d'écrire dans le flux de sortie d'abord, puis obtenir le code de réponse comme ceci:

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

Voici un petit tutoriel:

Reading and Writing Tutorial

+0

Merci pour la réponse et tutoriel – Mushy