【问题标题】:How to set HTTP request MOVE using HttpURLConnection?如何使用 HttpURLConnection 设置 HTTP 请求 MOVE?
【发布时间】:2013-02-18 23:45:24
【问题描述】:

如何使用HttpURLConnection设置HTTP请求方式MOVE?

使用 HttpURLConnection 或依赖于该类的库,代码会引发异常 Caused by: java.net.ProtocolException: Invalid HTTP method: MOVE。 所以我猜Java平台不支持MOVE方法。

是否有针对此问题/限制的补丁或解决方法?解决方法可能是另一个用于创建 HTTP 请求的 java 库。

编辑:请注意MOVE 动词受支持WebDav HTTP extension。还有PATCH extension,后来被添加到协议中。

这里的参考是 SkyDrive API 以及我们正在尝试实现的 move 功能。

注意Ruby platform supports the MOVE method. 我想知道为什么 java 不支持甚至不允许这些扩展

【问题讨论】:

  • 没有HTTP请求MOVE,见http methods
  • 您想使用 GET 或 POST 来处理您的请求。
  • 仅支持 GET、POST、PUT、DELETE、HEAD(Java 和 HTTP 都支持)。这个 MOVE 协议应该做什么?
  • 是WebDAV协议中的方法之一。
  • 我不明白为什么这个话题被关闭了。这是一个合法的问题,基于 Microsoft msdn.microsoft.com/en-us/library/live/hh243648.aspx#http_verbs COPY 和 MOVE 是标准的 HTTP 动词,但据我所知,它们不是标准的 HTTP 动词。有人能告诉我为什么这么混乱吗?

标签: java http httpurlconnection


【解决方案1】:

这是 HttpURLConnection 中的一个错误。如果您不想切换到其他库,可以尝试使用自省覆盖该方法(是的,这就是 Jersey 所做的,请参阅http://java.net/jira/browse/JERSEY-639

【讨论】:

  • 谢谢!球衣是路要走。
【解决方案2】:

如果服务器支持,您可以尝试使用X-HTTP-Method-Override: MOVE 标头发出POST 请求。

【讨论】:

    【解决方案3】:

    我更喜欢使用 Apache Http-Components 客户端。它有一个自定义网络实现,因此可以使用诸如 MOVE 或 PATCH 之类的非标准 HTTP 方法:

    CloseableHttpClient httpclient = HttpClients.createDefault();
    HttpUriRequest moveRequest = RequestBuilder
                .create("MOVE")
                .setUri("http://example.com")
                .build();        
    CloseableHttpResponse response = httpclient.execute(moveRequest);
    

    Maven 坐标:

    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.2+</version>
    </dependency>
    

    【讨论】:

      猜你喜欢
      • 2019-01-09
      • 1970-01-01
      • 2018-12-17
      • 1970-01-01
      • 1970-01-01
      • 2010-11-06
      • 2011-12-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多