URLConnection.setDoOutput()方法到底影响了什么?

93

URLConnection中有一个setDoOutput()方法。根据文档所述,如果您打算使用URL连接进行输出,则应将其设置为true,否则设置为false。

如果您打算使用URL连接进行输出,请将DoOutput标志设置为true;如果不打算使用,请设置为false。

现在我面临确切的问题——一旦调用setDoOutput(true),Java运行时会将请求转换为POST,而服务器仅响应GET请求。我想了解如果从代码中删除该setDoOutput(true)会发生什么。

这会影响什么?假设我将其设置为false——现在我可以做什么,不能做什么?我是否能执行GET请求?在此方法的上下文中,“output”是什么意思?

4个回答

113

如果你需要发送(输出)请求体,比如POST或PUT请求,那么你需要将它设置为true。而GET请求通常不会发送请求体,所以你不需要这样做。

通过连接的输出流来发送请求体本身:

conn.getOutputStream().write(someBytes);

如果我正在下载一张图片呢? - Jaydev
1
下载?还是上传? - Thilo

34

setDoOutput(true)用于POSTPUT请求。如果它是false,则表示使用GET请求。


2
好的,那么我该如何强制此连接执行PUT操作呢?因为另一端的服务器只接受PUT请求,而不是POST请求...? - ante.sabo
如果我正在下载一张图片呢? - Jaydev
为什么要使用setDoOutput这个名称?不是很直观的名称。 - Siddhartha

3

如果您有一个长期的连接并且发送GET和POST请求,那么添加注释时,这是我所做的:

if (doGet) {    // some boolean
    con.setDoOutput(false); // reset any previous setting, if con is long lasting
    con.setRequestMethod("GET");
}
else {
    con.setDoOutput(true);  // reset any previous setting, if con is long lasting
    con.setRequestMethod("POST");
}

为了避免连接持续时间过长,每次都要关闭连接。

if (doClose)    // some boolean
    con.setRequestProperty("Connection", "close");

con.connect();              // force connect request

0
public void setDoOutput( boolean dooutput )

它以一个值作为参数,并将此值设置为URLConnection的doOutput字段的指定值。

URL连接可用于输入和/或输出。如果您打算使用URL连接进行输出,请将DoOutput标志设置为true,否则设置为false。默认值为false。


5
我之前在文档中读过那些内容,但是我现在询问的原因是我不理解它们的含义。 - sharptooth
如果你想要向一个连接对象写入数据,你需要将serDoOutput设置为true。 - Mithun Sasidharan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接