我遇到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());
答案 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()
收益
读取输入后无法写入输出