HttpClient使用Delete方式提交資料
1. http請求主要有以下幾種方法來對指定資源做不同操作:
HTTP/1.1協議中共定義了八種方法(有時也叫“動作”)來表明Request-URI指定的資源的不同操作方式:
. OPTIONS - 返回伺服器針對特定資源所支援的HTTP請求方法。
也可以利用向Web伺服器傳送'*'的請求來測試伺服器的功能性。
. HEAD - 向伺服器索要與GET請求相一致的響應,只不過響應體將不會被返回。
這一方法可以在不必傳輸整個響應內容的情況下,就可以獲取包含在響應訊息頭中的元資訊。
. GET - 向特定的資源發出請求。
注意:GET方法不應當被用於產生“副作用”的操作中,例如在web app.中。
其中一個原因是GET可能會被網路蜘蛛等隨意訪問。
. POST - 向指定資源提交資料進行處理請求(例如提交表單或者上傳檔案)。
資料被包含在請求體中。POST請求可能會導致新的資源的建立和/或已有資源的修改。
. PUT - 向指定資源位置上傳其最新內容。
. DELETE - 請求伺服器刪除Request-URI所標識的資源。
. TRACE - 回顯伺服器收到的請求,主要用於測試或診斷。
. CONNECT - HTTP/1.1協議中預留給能夠將連線改為管道方式的代理伺服器。
. PATCH - 用來將區域性修改應用於某一資源,添加於規範RFC5789。
2.HttpDelete的方法中本身並沒有setEntity方法,參考HttpPost的setEntity方法,自定義一個HttpDeleteWithBody類
import java.net.URI;
import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;
public class HttpDeleteWithBody extends HttpEntityEnclosingRequestBase{
public static final String METHOD_NAME = "DELETE";
/**
* 獲取方法(必須過載)
*
* @return
*/
@Override
public String getMethod() {
return METHOD_NAME;
}
public HttpDeleteWithBody(final String uri) {
super();
setURI(URI.create(uri));
}
public HttpDeleteWithBody(final URI uri) {
super();
setURI(uri);
}
public HttpDeleteWithBody() {
super();
}
}
3. 用HttpClient 呼叫 HttpDeleteWithBody的方法,就可以進行body的操作了
public static String doDelete(String data, String url) throws IOException {
CloseableHttpClient client = null;
HttpDeleteWithBody httpDelete = null;
String result = null;
try {
client = HttpClients.createDefault();
httpDelete = new HttpDeleteWithBody(url);
httpDelete.addHeader("Content-type","application/json; charset=utf-8");
httpDelete.setHeader("Accept", "application/json; charset=utf-8");
httpDelete.setEntity(new StringEntity(data));
CloseableHttpResponse response = client.execute(httpDelete);
HttpEntity entity = response.getEntity();
result = EntityUtils.toString(entity);
if (200 == response.getStatusLine().getStatusCode()) {
LOGGER.info("遠端呼叫成功.msg={}", result);
}
} catch (Exception e) {
LOGGER.error("遠端呼叫失敗,errorMsg={}", e.getMessage());
} finally {
client.close();
}
return result;