Java中的cURL DELETE

时间:2014-07-14 20:22:39

标签: java apache url curl xmlhttprequest

就像标题所说,我试图在 Java 中编写以下curl DELETE命令。

curl -X DELETE -H "Content-Type: application/json; charset=UTF-8" http://10.84.14.2:8082/virtual-network/47a91732-629b-4cbe-9aa5-45ba4d7b0e99

我的理解是您必须格式化DELETE内的POST请求。以下是我GET电话的工作代码。

URL dc0ContrailUrl2 = new URL("http://10.10.10.120:8082/network-policy/363bf699-6417-486e-9791-d5aaf873d9bb");
    URLConnection dcConn2 = dc0ContrailUrl2.openConnection();
    dcConn2.setRequestProperty("Content-Type", "application/json");
    BufferedReader in2 = newBufferedReader(newInputStreamReader(dcConn2.getInputStream()));

    String inputLine2;

while ((inputLine2 = in2.readLine()) != null){ //while response is not null, assign response to inputLine and print inputLine
        System.out.println(inputLine2); 
}
        in2.close();

当我四处寻找如何处理DELETE请求时,我最终得到了以下内容:

URL url3 = new URL("http://10.10.10.120:8082/network-policy/363bf699-6417-486e-9791-d5aaf873d9bb");
        HttpURLConnection httpConnection3 = (HttpURLConnection) url3.openConnection();
        httpConnection3.setDoOutput(true);
        httpConnection3.setRequestProperty("Content-Type", "application/json" );
        httpConnection3.setRequestMethod("DELETE");

此时我已经走了谷歌兔洞,我确信解决方案非常简单,只需更改一些语法/方法调用。非常感谢任何帮助。

注意:我只需输入网址DELETE,然后将下拉菜单切换为“{1}}即可让http://10.10.10.120:8082/network-policy/363bf699-6417-486e-9791-d5aaf873d9bb调用使用Postman(Chrome应用) DELETE,所以我知道我的网址不是问题。

2 个答案:

答案 0 :(得分:3)

不要直接使用HttpURLConnection,而是尝试使用HttpClient中的Apache HttpComponents这样的库,这是一个如何在删除命令中使用它的示例:

void sendDelete() throws IOException {
    CloseableHttpClient httpclient = HttpClients.createDefault();

    // create DELETE REQUEST
    HttpDelete httpDelete = new HttpDelete(
        "http://10.84.14.2:8082/virtual-network/47a91732-629b-4cbe-9aa5-45ba4d7b0e99");

    // add header "content-type"
    httpDelete.addHeader(new BasicHeader("Content-Type", "application/json; charset=UTF-8"));

    // send request
    CloseableHttpResponse response1 = httpclient.execute(httpDelete);

    // close response (ideally inside a finally clause in a try/catch)
    response1.close();

}

答案 1 :(得分:1)

  

我的理解是您必须格式化DELETE内的POST请求。

这是不正确的。您发布的Curl命令会执行“删除”操作。请求,在这个意义上,POST和DELETE(和GET)是备用HTTP请求"方法"。可能有一些Web服务以POST和/或GET请求的形式接受某种删除命令,但这不是Curl正在做的事情。 (当你选择' DELETE'请求方法时,它也不是Postman正在做的事情。)

您的代码实际上非常正确。指定您要输出(因为您没有),因此指定内容类型(因为请求没有内容)是没用的,但是它可能没有害处。您甚至可以setDoInput(false)连接,因为您通常不希望服务器在其响应中发送任何内容,但是将其保留也应该没问题。

您最不想要的是调用连接的connect()方法。你不需要在你的" GET"例如,因为读取连接的输入流会导致它自动连接。