【问题标题】:What exactly does URLConnection.setDoOutput() affect?URLConnection.setDoOutput() 究竟有什么影响?
【发布时间】:2012-01-25 03:39:24
【问题描述】:

URLConnection 中有 setDoOutput()。根据documentation我应该

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

现在我面对的是exactly this problem——一旦调用了setDoOutput(true),Java 运行时就会将请求转换为POST,并且服务器只响应GET 请求。我想了解如果我从代码中删除 setDoOutput(true) 会发生什么。

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

【问题讨论】:

    标签: java android urlconnection


    【解决方案1】:

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

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

    conn.getOutputStream().write(someBytes);
    

    【讨论】:

    • 如果我正在下载图像怎么办?
    • 正在下载吗?还是上传?
    【解决方案2】:

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

    【讨论】:

    • 好的,既然另一端的服务器只接受 PUT 请求,不接受 POST...,我该如何强制此连接执行 PUT?
    • 如果我正在下载图像怎么办?
    • 为什么叫setDoOutput?不是一个很直观的名字
    【解决方案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
    

    【讨论】:

      【解决方案4】:
      public void setDoOutput( boolean dooutput )
      

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

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

      【讨论】:

      • 在询问之前我已经在文档中阅读了这一点。我问的原因是我不明白这些的含义。
      • 如果你想写入一个连接对象,你必须将 serDoOutput 设置为 true
      猜你喜欢
      • 1970-01-01
      • 2012-08-08
      • 1970-01-01
      • 2014-10-28
      • 2012-08-27
      • 2010-11-12
      • 2011-03-18
      • 2011-01-22
      相关资源
      最近更新 更多