Отправка формы в Java
Когда данные нужно передать в теле, а не в адресе,
используют метод с телом запроса. В построителе
вместо GET вызывают POST с
издателем HttpRequest.BodyPublishers.ofString.
Форма "application/x-www-form-urlencoded" -
строка пар "ключ=значение" через
"&". Тип задают заголовком
"Content-Type". Сервис "/post"
возвращает принятое тело в ответе:
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Main {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newBuilder().build();
String payload = "sku=axle&count=3";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://httpbin.org/post"))
.header(
"Content-Type",
"application/x-www-form-urlencoded",
)
.POST(HttpRequest.BodyPublishers.ofString(payload))
.build();
HttpResponse<String> response = client.send(
request,
HttpResponse.BodyHandlers.ofString(),
);
System.out.println(response.body());
}
}
Ответ читают так же строкой через
BodyHandlers.ofString. Разбор структуры
тела здесь не нужен - достаточно увидеть, что
сервер получил те же поля:
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Main {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newBuilder().build();
String payload = "note=ship&priority=low";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://httpbin.org/post"))
.header(
"Content-Type",
"application/x-www-form-urlencoded",
)
.POST(HttpRequest.BodyPublishers.ofString(payload))
.build();
HttpResponse<String> response = client.send(
request,
HttpResponse.BodyHandlers.ofString(),
);
System.out.println(response.statusCode());
System.out.println(response.body());
}
}
Отправьте на "/post" форму с полями
"user" равным "mia" и
"role" равным "editor".
Выведите тело ответа одной строкой.
Выведите код ответа и полное тело после отправки
с одним полем "token" равным
"demo" на "/post".