我必须提交一个包含正文的 http DELETE 请求。我知道如何做到这一点,但就我而言,它使用 java.net.http.HttpRequest
。不幸的是,该组件仅允许将 BodyPublisher
提交到 PUT 和 POST 请求。
我的问题是,有没有办法使用 HttpRequest
来处理有问题的 DELETE 请求?
最佳答案
您可以使用带有两个参数的 HttpRequest.Builder::method
:
HttpClient client = HttpClient.newBuilder().proxy(HttpClient.Builder.NO_PROXY).build();
HttpServer server = HttpServer.create();
server.bind(new InetSocketAddress(InetAddress.getLoopbackAddress(), 0), 0);
server.createContext("/test/", new HttpHandler() {
@Override
public void handle(HttpExchange exchange) throws IOException {
byte[] bytes = exchange.getRequestBody().readAllBytes();
exchange.sendResponseHeaders(200, bytes.length == 0 ? -1 : bytes.length);
try (OutputStream os = exchange.getResponseBody()) {
os.write(bytes);
}
}
});
server.start();
try {
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI("http", null,
server.getAddress().getHostString(),
server.getAddress().getPort(),
"/test/test", null, null))
.method("DELETE", HttpRequest.BodyPublishers.ofString("hahaha...")).build();
var resp = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(resp);
System.out.println(resp.body());
} finally {
server.stop(0);
}
关于HttpRequest DELETE 带正文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57389571/