如果在写入连接之前获取InputStream,则会发生错误500

时间:2012-11-25 17:14:39

标签: java http httprequest httpurlconnection

以下代码

OutputStream outputWeb = conn.getOutputStream();

File file = new File("myfile");
InputStream inputFile = new FileInputStream(file);

InputStream inputWeb = conn.getInputStream();           

while((ch=inputFile.read()) >= 0) {
    outputWeb.write(ch);
}

导致IOException消息“服务器返回HTTP响应代码:500 for URL:myurl”就在从连接中获取InputStream的行。

虽然下面的代码不会导致任何异常并且工作正常

OutputStream outputWeb = conn.getOutputStream();

File file = new File("myfile");
InputStream inputFile = new FileInputStream(file);

while((ch=inputFile.read()) >= 0) {
    outputWeb.write(ch);
}

InputStream inputWeb = conn.getInputStream();

唯一的区别是在写入连接后获取输入流。

如何从API合约中推断出这一点?发生了什么以及为什么?

conn配置

URL url = new URL("https://myurl");
HttpURLConnection conn;

// creating http connection 
conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setRequestProperty("Content-type", "audio....");

更新

现在原则上很清楚,但我仍希望在API合同中看到这一点。即它应该写在某个地方,我不能生成输入流,直到写东西。在任何情况下,实现都可以允许这种情况,只需要让该流的读者等待。

0 个答案:

没有答案