Должен ли я получить код ответа с сервера?

У меня есть следующий код

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

Если я не заинтересован в ответе с сервера, могу ли я удалить следующий код?

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

Учитывая, что код, как он есть, вызывает java.net.ProtocolExceptionЕсть ли способ по-прежнему захватить ответ сервера и выполнить conn.getOutputStream();? В каком порядке? Каковы последствия отсутствия получения ответа помимо очевидных проблем с отчетностью?

1 ответ

Решение

Проблема в том, что, получив код ответа, вы отправили свое сообщение. В вашем коде вы ничего не записываете в поток вывода до того, как получите ответ. Таким образом, вы по сути ничего не отправляете по почте (только эта информация заголовка), получаете код ответа, а затем пытаетесь снова написать в него, что недопустимо. Что вам нужно сделать, это сначала записать в выходной поток, а затем получить код ответа следующим образом:

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

Вот небольшой урок:

Учебник по чтению и письму

Другие вопросы по тегам