读取输入后无法写入输出;经历这个但不确定的原因

时间:2016-11-28 19:44:57

标签: java httpurlconnection protocolexception

我遇到this问题,但不确定是否确切。

我在日志中发现Cannot write output after reading input,根据上述情况,我认为这是因为getResponseCode()后跟getOutputStream()而发生的。

这会是我看到的记录错误的原因吗?

HttpURLConnection conn = (HttpURLConnection) url.openConnection();

if(conn.getResponseCode() == 0){
    logger.debug("Success");
} else {                 
    logger.debug("Time out set for 30 seconds");
}
String input = writer.getBuffer().toString();
OutputStream os = conn.getOutputStream();
os.write(input.getBytes());

1 个答案:

答案 0 :(得分:1)

以下代码

StringWriter writer = new StringWriter();

String pushURL = "Your URL";

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() == 0){
     logger.debug("Success");
} else {                 
 logger.debug("Time out set for 30 seconds");
}

String input = writer.getBuffer().toString();

OutputStream os = conn.getOutputStream();

os.write(input.getBytes());

os.flush();

将导致java.net.ProtocolException,因为以下位于here

  

HTTP协议基于请求 - 响应模式:您首先发送请求,服务器响应。一旦服务器响应,您就无法发送更多内容,这是没有意义的。 (服务器怎么能在知道你要发送什么之前给你一个响应代码?)

     

因此,当您调用server.getResponseCode()时,您可以有效地告诉服务器您的请求已完成并且可以处理它。如果要发送更多数据,则必须开始新请求。

因此,OP在conn.getOutputStream();之后调用conn.getResponseCode(),生成java.net.ProtocolException Exception.getMessages()收益

  

读取输入后无法写入输出