正如标题所述,我试图用DELETE 编写以下curl 命令。
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");在这一点上,我已经深入谷歌的兔子洞,我确信解决方案非常简单,只是一个改变一些语法/方法调用的问题。任何帮助都是非常感谢的。
注意:--我可以通过简单地输入URL http://10.10.10.120:8082/network-policy/363bf699-6417-486e-9791-d5aaf873d9bb并将下拉菜单切换到DELETE来使用Postman(铬应用程序)来让DELETE调用工作,所以我知道我的URL不是问题所在。
发布于 2014-07-14 20:46:12
不要直接使用HttpURLConnection,而是尝试使用类似于Apache HttpComponents中的HttpClient这样的库,这是如何在delete命令中使用它的一个例子:
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();
}发布于 2014-07-14 20:52:52
我的理解是,您必须在一个
DELETE中格式化POST请求。
这是不正确的。您发布的Curl命令执行' DELETE‘请求,从这个意义上讲,POST和DELETE(和GET)是另一种HTTP请求“方法”。有些web服务可能以POST和/或GET请求的形式接受某种类型的删除命令,但Curl并不是这样做的。(这也不是邮递员在选择“删除”请求方法时所做的事情。)
您的代码实际上是正确的。指定要进行输出(因为没有)是没有用的,因此也没有指定内容类型(因为请求没有内容),但是这样做可能没有什么害处。您甚至可以在连接上使用setDoInput(false),因为通常您不会期望服务器在其响应中发送任何内容,但是将其排除在外也是可以的。
您缺少的主要内容是调用连接的connect()方法。在"GET“示例中不需要这样做,因为读取连接的输入流会使其自动连接。
https://stackoverflow.com/questions/24745271
复制相似问题