1. 程式人生 > >HttpClient使用Delete方式提交資料

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;