URLConnection.setDoOutput()究竟会影响什么?


79

setDoOutput()URLConnection。根据文件我应该

如果您打算将URL连接用于输出,请将DoOutput标志设置为true,否则将其设置为false。

现在,我正好面对这个问题-Java运行时将请求转换为POST一次setDoOutput(true)调用,而服务器仅响应GET请求。我想了解如果我setDoOutput(true)从代码中删除代码会发生什么。

这究竟会影响什么?假设我将其设置为false-现在可以做什么,现在不能做什么?我可以执行GET请求吗?在此方法的上下文中,“输出”是什么?

Answers:


95

如果要发送(输出)请求正文(例如POST或PUT请求),则需要将其设置为true 。使用GET,通常不需要发送正文,因此您不需要它。

发送请求正文本身是通过连接的输出流完成的:

conn.getOutputStream().write(someBytes);

如果我要下载图片怎么办?
Jaydev '16

正在下载?还是上传?
Thilo


1

添加一条评论,如果您的连接很长并且发送了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 )

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

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


3
在询问之前,我已经阅读了文档。我要问的原因是我没有理解那些含义。
sharptooth 2011年

如果要写入连接对象,则必须将serDoOutput设置为true
Mithun Sasidharan 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.