2013-03-04 55 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>