2013-03-04 54 views
1

如何使用HttpURLConnection设置HTTP请求方法MOVE?如何使用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不支持甚至不允许那些扩展

+1

没有'HTTP'要求'MOVE',请参阅[http methods](http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods) – 2013-03-04 19:11:41

+0

您想为您的请求使用GET或POST。 – 2013-03-04 19:12:42

+0

仅支持GET,POST,PUT,DELETE,HEAD(同时由Java和HTTP)。 MOVE协议应该做什么? – aymeric 2013-03-04 19:13:00

回答

3

这是HttpURLConnection中的一个错误。如果你不想切换到不同的库,你可以尝试用自省覆盖方法(是的,这就是泽西所做的,参见http://java.net/jira/browse/JERSEY-639

+0

谢谢!球衣是要走的路。 – 2013-03-04 20:54:26

2

如果服务器支持它,你可以尝试提出POST请求与X-HTTP-Method-Override: MOVE标题。

1

我更喜欢使用Apache Http-Components Client。它有一个自定义的网络实现,从而使用非标准的HTTP方法,如移动或PATCH是可能的:

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>