Enviando uma requisição HTTP

Java:
Enviando uma requisição HTTP

How to:

O Java oferece várias maneiras de enviar requisições HTTP. Desde o Java 11, a classe HttpClient tornou o processo mais simples e direto. Aqui está um exemplo rápido de como fazer uma requisição GET:

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class HttpRequestExample {
    public static void main(String[] args) {
        // Cria o HttpClient
        HttpClient client = HttpClient.newHttpClient();

        // Cria a requisição
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create("http://example.com"))
                .build();

        // Envia a requisição e recebe a resposta
        client.sendAsync(request, HttpResponse.BodyHandlers.ofString())
                .thenApply(HttpResponse::body)
                .thenAccept(System.out::println)
                .join();
    }
}

Esse código vai imprimir o conteúdo HTML da página http://example.com.

Deep Dive:

As requisições HTTP não são novidade; elas são a espinha dorsal da web desde os anos 90. Antes do HttpClient no Java 11, a tarefa muitas vezes exigia bibliotecas de terceiros como Apache HttpComponents ou a classe HttpURLConnection. Cada alternativa tem suas peculiaridades e casos de uso, mas HttpClient é mais moderno e integrado, dispensando dependências externas.

Falando de níveis mais baixos: uma requisição HTTP é apenas um texto formatado enviado por um socket TCP. O HttpClient e as classes relacionadas simplificam esse processo, lidando com a serialização, análise e erros de conexão para você.

O uso de sendAsync no exemplo permite a execução assíncrona, não bloqueando o programa enquanto espera pela resposta do servidor. Para requisições síncronas, use send.

Para aprofundar, é fundamental entender os métodos HTTP (GET, POST, PUT, DELETE, etc.) e status de resposta (200 OK, 404 Not Found, 500 Internal Server Error, etc.), além de como trabalhar com cabeçalhos e corpos de requisição.

See Also: