就像标题所说,我试图在 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
,所以我知道我的网址不是问题。
答案 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"例如,因为读取连接的输入流会导致它自动连接。