OkHttp Java : Requêtes HTTP simplifiées
Dans le développement moderne de Java, une gestion efficace des requêtes HTTP est cruciale pour construire des applications robustes, en particulier celles qui dépendent des services web et des API. OkHttp, un client HTTP & HTTP/2 puissant pour Java et Kotlin, est devenu un choix populaire grâce à ses performances, sa facilité d'utilisation et ses fonctionnalités avancées.
Cet article fournit un guide complet sur OkHttp, couvrant ses principales fonctionnalités, son installation et ses cas d'utilisation courants.
Qu'est-ce que OkHttp ?
OkHttp est une bibliothèque Java open-source polyvalente pour la gestion des requêtes HTTP, offrant un ensemble complet de fonctionnalités pour une intégration transparente dans vos applications. Avec son API intuitive, créer une nouvelle requête ou exécuter une simple requête POST est aussi facile que de configurer un nouveau constructeur de requêtes avec des paramètres de requête et une URL en chaîne.
De plus, OkHttp facilite la gestion efficace des réponses, offrant l'accès au corps de la réponse, aux en-têtes de la réponse, et prenant même en charge la mise en cache des réponses pour optimiser le trafic réseau et réduire les problèmes de disponibilité du serveur. Que vous fassiez des appels synchrones ou asynchrones, la mise en commun des connexions d'OkHttp assure des performances optimales, même lorsqu'il s'agit de gérer plusieurs adresses IP.

Pour les développeurs habitués à utiliser Apache HTTP Client, OkHttp offre une alternative plus moderne et plus efficace, avec des performances et une flexibilité améliorées. Sa prise en charge des appels asynchrones et des rappels en fait un choix privilégié pour les applications nécessitant réactivité et évolutivité.
Avec OkHttp, la gestion de nombreux clients et requêtes HTTP devient sans effort, permettant aux développeurs de se concentrer sur la construction d'applications robustes et fiables sans compromettre les performances ou la fonctionnalité.
Fonctionnalités clés
Les fonctionnalités clés d'OkHttp incluent :
- Gestion des requêtes synchrones et asynchrones : OkHttp permet à la fois des opérations synchrones (bloquantes) et asynchrones (non bloquantes).
- Mise en commun des connexions : réutilise les connexions HTTP pour minimiser les problèmes de connectivité client et améliorer les performances.
- Compression GZIP transparente : réduit la taille des réponses HTTP, économisant ainsi de la bande passante et accélérant le transfert de données.
- Mise en cache : Prend en charge la mise en cache des réponses, réduisant ainsi le besoin de requêtes réseau répétées.
- Prise en charge de HTTP/2 : améliore les performances en permettant le multiplexage de plusieurs requêtes et réponses sur une seule connexion.
- Délais d'attente et nouvelles tentatives : Offre un contrôle précis des délais d'attente de connexion et de lecture, ainsi que des mécanismes de nouvelle tentative pour les requêtes ayant échoué.
Installation de OkHttp
Pour commencer à utiliser OkHttp dans votre projet Java, vous devez inclure sa dépendance dans votre configuration de build. Si vous utilisez Maven, ajoutez la dépendance suivante à votre fichier pom.xml :
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>5.0.0-alpha.14</version>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>5.0.0-alpha.14</version>
</dependency>
Pour Gradle, ajoutez cette ligne à votre fichier build.gradle :
implementation 'com.squareup.okhttp3:okhttp:5.0.0-alpha.14'
Assurez-vous de vérifier la dernière version sur Maven Central ou GitHub.
Utilisation de base
Créer un OkHttpClient
La classe OkHttpClient est le point d'entrée principal pour l'exécution des requêtes HTTP. Il est recommandé de créer une seule instance OkHttpClient et de la réutiliser dans toute votre application pour profiter du pool de connexions.
import okhttp3.OkHttpClient;
OkHttpClient client = new OkHttpClient();
import okhttp3.OkHttpClient;
OkHttpClient client = new OkHttpClient();
Réaliser des requêtes GET
Pour effectuer une simple requête GET, vous devez créer un objet Request et l'exécuter en utilisant OkHttpClient.
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import java.io.IOException;
public class OkHttpExample {
public static void main(String[] args) {
OkHttpClient client = new OkHttpClient();
// Create a request specifying the URL
Request request = new Request.Builder()
.url("https://jsonplaceholder.typicode.com/posts/1")
.build();
// Execute the request and handle the response
try (Response response = client.newCall(request).execute()) {
if (response.isSuccessful()) { // Check if the response was successful
System.out.println(response.body().string()); // Print the response body
} else {
System.err.println("Request failed: " + response.code()); // Print error code
}
} catch (IOException e) {
e.printStackTrace(); // Handle exceptions
}
}
}
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import java.io.IOException;
public class OkHttpExample {
public static void main(String[] args) {
OkHttpClient client = new OkHttpClient();
// Create a request specifying the URL
Request request = new Request.Builder()
.url("https://jsonplaceholder.typicode.com/posts/1")
.build();
// Execute the request and handle the response
try (Response response = client.newCall(request).execute()) {
if (response.isSuccessful()) { // Check if the response was successful
System.out.println(response.body().string()); // Print the response body
} else {
System.err.println("Request failed: " + response.code()); // Print error code
}
} catch (IOException e) {
e.printStackTrace(); // Handle exceptions
}
}
}

Réaliser des requêtes POST
Pour une requête POST, vous devez inclure un corps de requête et renvoyer une réponse. OkHttp fournit la classe RequestBody pour gérer cela.
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import java.io.IOException;
public class OkHttpExample {
// Define the JSON media type
public static final MediaType JSON = MediaType.get("application/json; charset=utf-8");
public static void main(String[] args) {
OkHttpClient client = new OkHttpClient();
// JSON data to be sent
String json = "{\"title\":\"foo\",\"body\":\"bar\",\"userId\":1}";
// Create request body with JSON data
RequestBody body = RequestBody.create(json, JSON);
// Build the POST request
Request request = new Request.Builder()
.url("https://jsonplaceholder.typicode.com/posts")
.post(body)
.build();
// Execute the request and handle the response
try (Response response = client.newCall(request).execute()) {
if (response.isSuccessful()) { // Check if the response was successful
System.out.println(response.body().string()); // Print the response body
} else {
System.err.println("Request failed: " + response.code()); // Print error code
}
} catch (IOException e) {
e.printStackTrace(); // Handle exceptions
}
}
}
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import java.io.IOException;
public class OkHttpExample {
// Define the JSON media type
public static final MediaType JSON = MediaType.get("application/json; charset=utf-8");
public static void main(String[] args) {
OkHttpClient client = new OkHttpClient();
// JSON data to be sent
String json = "{\"title\":\"foo\",\"body\":\"bar\",\"userId\":1}";
// Create request body with JSON data
RequestBody body = RequestBody.create(json, JSON);
// Build the POST request
Request request = new Request.Builder()
.url("https://jsonplaceholder.typicode.com/posts")
.post(body)
.build();
// Execute the request and handle the response
try (Response response = client.newCall(request).execute()) {
if (response.isSuccessful()) { // Check if the response was successful
System.out.println(response.body().string()); // Print the response body
} else {
System.err.println("Request failed: " + response.code()); // Print error code
}
} catch (IOException e) {
e.printStackTrace(); // Handle exceptions
}
}
}

Requêtes asynchrones
Les requêtes asynchrones sont gérées à l'aide de rappels, permettant à votre application de rester réactive en attendant la réponse.
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import java.io.IOException;
public class OkHttpExample {
public static void main(String[] args) {
OkHttpClient client = new OkHttpClient();
// Create a request specifying the URL
Request request = new Request.Builder()
.url("https://jsonplaceholder.typicode.com/posts/1")
.build();
// Enqueue the request to be executed asynchronously
client.newCall(request).enqueue(new Callback() {
// Handle failure of the request
@Override
public void onFailure(Call call, IOException e) {
e.printStackTrace(); // Handle exceptions
}
// Handle successful response
@Override
public void onResponse(Call call, Response response) throws IOException {
if (response.isSuccessful()) { // Check if the response was successful
System.out.println(response.body().string()); // Print the response body
} else {
System.err.println("Request failed: " + response.code()); // Print error code
}
}
});
}
}
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import java.io.IOException;
public class OkHttpExample {
public static void main(String[] args) {
OkHttpClient client = new OkHttpClient();
// Create a request specifying the URL
Request request = new Request.Builder()
.url("https://jsonplaceholder.typicode.com/posts/1")
.build();
// Enqueue the request to be executed asynchronously
client.newCall(request).enqueue(new Callback() {
// Handle failure of the request
@Override
public void onFailure(Call call, IOException e) {
e.printStackTrace(); // Handle exceptions
}
// Handle successful response
@Override
public void onResponse(Call call, Response response) throws IOException {
if (response.isSuccessful()) { // Check if the response was successful
System.out.println(response.body().string()); // Print the response body
} else {
System.err.println("Request failed: " + response.code()); // Print error code
}
}
});
}
}
Fonctionnalités avancées
Intercepteurs
Les intercepteurs sont une fonctionnalité puissante qui vous permet d'inspecter, de modifier ou de réessayer des requêtes et des réponses. Ils peuvent être utilisés pour la journalisation, l'ajout d'en-têtes ou la gestion de l'authentification.
import okhttp3.Interceptor;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import java.io.IOException;
public class OkHttpExample {
public static void main(String[] args) {
// Add an interceptor for modifying requests
OkHttpClient client = new OkHttpClient.Builder()
.addInterceptor(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
// Modify the request to add the authorization header
Request request = chain.request().newBuilder()
.addHeader("Authorization", "Bearer your_token_here")
.build();
return chain.proceed(request);
}
})
.build();
// Create a request specifying the URL
Request request = new Request.Builder()
.url("https://jsonplaceholder.typicode.com/posts/1")
.build();
// Execute the request and handle the response
try (Response response = client.newCall(request).execute()) {
if (response.isSuccessful()) { // Check if the response was successful
System.out.println(response.body().string()); // Print the response body
} else {
System.err.println("Request failed: " + response.code()); // Print error code
}
} catch (IOException e) {
e.printStackTrace(); // Handle exceptions
}
}
}
import okhttp3.Interceptor;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import java.io.IOException;
public class OkHttpExample {
public static void main(String[] args) {
// Add an interceptor for modifying requests
OkHttpClient client = new OkHttpClient.Builder()
.addInterceptor(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
// Modify the request to add the authorization header
Request request = chain.request().newBuilder()
.addHeader("Authorization", "Bearer your_token_here")
.build();
return chain.proceed(request);
}
})
.build();
// Create a request specifying the URL
Request request = new Request.Builder()
.url("https://jsonplaceholder.typicode.com/posts/1")
.build();
// Execute the request and handle the response
try (Response response = client.newCall(request).execute()) {
if (response.isSuccessful()) { // Check if the response was successful
System.out.println(response.body().string()); // Print the response body
} else {
System.err.println("Request failed: " + response.code()); // Print error code
}
} catch (IOException e) {
e.printStackTrace(); // Handle exceptions
}
}
}
Gestion des délais d'attente
OkHttp fournit des méthodes pour définir des délais d'attente pour différentes étapes de la requête HTTP elle-même.
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
public class OkHttpExample {
public static void main(String[] args) {
// Configure timeouts for connections, writes, and reads
OkHttpClient client = new OkHttpClient.Builder()
.connectTimeout(10, TimeUnit.SECONDS)
.writeTimeout(10, TimeUnit.SECONDS)
.readTimeout(30, TimeUnit.SECONDS)
.build();
// Create a request specifying the URL
Request request = new Request.Builder()
.url("https://jsonplaceholder.typicode.com/posts/1")
.build();
// Execute the request and handle the response
try (Response response = client.newCall(request).execute()) {
if (response.isSuccessful()) { // Check if the response was successful
System.out.println(response.body().string()); // Print the response body
} else {
System.err.println("Request failed: " + response.code()); // Print error code
}
} catch (IOException e) {
e.printStackTrace(); // Handle exceptions
}
}
}
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
public class OkHttpExample {
public static void main(String[] args) {
// Configure timeouts for connections, writes, and reads
OkHttpClient client = new OkHttpClient.Builder()
.connectTimeout(10, TimeUnit.SECONDS)
.writeTimeout(10, TimeUnit.SECONDS)
.readTimeout(30, TimeUnit.SECONDS)
.build();
// Create a request specifying the URL
Request request = new Request.Builder()
.url("https://jsonplaceholder.typicode.com/posts/1")
.build();
// Execute the request and handle the response
try (Response response = client.newCall(request).execute()) {
if (response.isSuccessful()) { // Check if the response was successful
System.out.println(response.body().string()); // Print the response body
} else {
System.err.println("Request failed: " + response.code()); // Print error code
}
} catch (IOException e) {
e.printStackTrace(); // Handle exceptions
}
}
}
Mise en cache des réponses
OkHttp peut mettre en cache les réponses pour réduire la latence des requêtes et améliorer les performances. Cela nécessite de configurer un répertoire et une taille de cache.
import okhttp3.Cache;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import java.io.File;
import java.io.IOException;
public class OkHttpExample {
public static void main(String[] args) {
// Define the cache directory and size
File cacheDirectory = new File("cacheDirectory");
Cache cache = new Cache(cacheDirectory, 10 * 1024 * 1024); // 10 MB cache
// Build OkHttpClient with caching capability
OkHttpClient client = new OkHttpClient.Builder()
.cache(cache)
.build();
// Create a request specifying the URL
Request request = new Request.Builder()
.url("https://jsonplaceholder.typicode.com/posts/1")
.build();
// Execute the request and handle the response
try (Response response = client.newCall(request).execute()) {
if (response.isSuccessful()) { // Check if the response was successful
System.out.println(response.body().string()); // Print the response body
} else {
System.err.println("Request failed: " + response.code()); // Print error code
}
} catch (IOException e) {
e.printStackTrace(); // Handle exceptions
}
}
}
import okhttp3.Cache;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import java.io.File;
import java.io.IOException;
public class OkHttpExample {
public static void main(String[] args) {
// Define the cache directory and size
File cacheDirectory = new File("cacheDirectory");
Cache cache = new Cache(cacheDirectory, 10 * 1024 * 1024); // 10 MB cache
// Build OkHttpClient with caching capability
OkHttpClient client = new OkHttpClient.Builder()
.cache(cache)
.build();
// Create a request specifying the URL
Request request = new Request.Builder()
.url("https://jsonplaceholder.typicode.com/posts/1")
.build();
// Execute the request and handle the response
try (Response response = client.newCall(request).execute()) {
if (response.isSuccessful()) { // Check if the response was successful
System.out.println(response.body().string()); // Print the response body
} else {
System.err.println("Request failed: " + response.code()); // Print error code
}
} catch (IOException e) {
e.printStackTrace(); // Handle exceptions
}
}
}
Intégration d'OkHttp avec IronPDF en Java
Combiner les capacités d'OkHttp et d'IronPDF permet aux développeurs Java de récupérer des données sur le web et de les convertir en PDF. OkHttp est un client HTTP robuste pour gérer les requêtes réseau, tandis qu'IronPDF est une bibliothèque puissante pour générer des PDFs à partir de diverses sources.
IronPDF - Aperçu
IronPDF for Java est une bibliothèque complète conçue pour simplifier la génération de PDF au sein d'applications Java. En s'appuyant sur son API intuitive, les développeurs peuvent créer, manipuler et rendre facilement des documents PDF à partir de diverses sources de données, y compris HTML, images et texte.
Avec le support de fonctionnalités avancées telles que le cryptage PDF, les signatures numériques et le remplissage de formulaires interactifs, IronPDF permet aux développeurs de produire des PDFs de qualité professionnelle adaptés à leurs exigences spécifiques. Son intégration transparente et sa documentation exhaustive en font une solution incontournable pour les développeurs Java cherchant à améliorer leurs applications avec des capacités robustes de génération de PDF.

Configuration des dépendances
Tout d'abord, ajoutez les dépendances nécessaires à votre fichier pom.xml (pour Maven) ou build.gradle (pour Gradle).
Maven
<dependency>
<groupId>com.ironsoftware</groupId>
<artifactId>ironpdf</artifactId>
<version>2024.3.1</version>
</dependency>
<dependency>
<groupId>com.ironsoftware</groupId>
<artifactId>ironpdf</artifactId>
<version>2024.3.1</version>
</dependency>
Gradle
implementation 'com.ironsoftware:ironpdf:2024.3.1'
Intégration d'OkHttp et IronPDF
Nous allons maintenant combiner les deux fonctionnalités : récupérer du contenu HTML avec OkHttp et générer un PDF avec IronPDF.
import com.ironsoftware.ironpdf.PdfDocument;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import java.io.IOException;
import java.nio.file.Paths;
public class OkHttpToPdf {
private final OkHttpClient client = new OkHttpClient(); // Initialize the OkHttpClient
// Method to fetch HTML content from a given URL
public String fetchHtml(String url) throws IOException {
Request request = new Request.Builder()
.url(url)
.build();
// Execute the request and return the response body as a string
try (Response response = client.newCall(request).execute()) {
if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);
return response.body().string();
}
}
// Method to generate a PDF from a URL
public void generatePdfFromUrl(String url, String outputFilePath) {
try {
String htmlContent = fetchHtml(url); // Fetch the HTML content
PdfDocument pdf = PdfDocument.renderHtmlAsPdf(htmlContent); // Render HTML as PDF
pdf.saveAs(Paths.get(outputFilePath)); // Save the PDF to the specified path
System.out.println("PDF generated successfully at " + outputFilePath);
} catch (IOException e) {
System.err.println("Failed to fetch HTML content: " + e.getMessage());
} catch (Exception e) {
System.err.println("Failed to generate PDF: " + e.getMessage());
}
}
// Main method to demonstrate fetching HTML and generating a PDF
public static void main(String[] args) {
OkHttpToPdf converter = new OkHttpToPdf(); // Create an instance of OkHttpToPdf
converter.generatePdfFromUrl("https://ironpdf.com/java", "website.pdf"); // Fetch HTML and generate PDF
}
}
import com.ironsoftware.ironpdf.PdfDocument;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import java.io.IOException;
import java.nio.file.Paths;
public class OkHttpToPdf {
private final OkHttpClient client = new OkHttpClient(); // Initialize the OkHttpClient
// Method to fetch HTML content from a given URL
public String fetchHtml(String url) throws IOException {
Request request = new Request.Builder()
.url(url)
.build();
// Execute the request and return the response body as a string
try (Response response = client.newCall(request).execute()) {
if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);
return response.body().string();
}
}
// Method to generate a PDF from a URL
public void generatePdfFromUrl(String url, String outputFilePath) {
try {
String htmlContent = fetchHtml(url); // Fetch the HTML content
PdfDocument pdf = PdfDocument.renderHtmlAsPdf(htmlContent); // Render HTML as PDF
pdf.saveAs(Paths.get(outputFilePath)); // Save the PDF to the specified path
System.out.println("PDF generated successfully at " + outputFilePath);
} catch (IOException e) {
System.err.println("Failed to fetch HTML content: " + e.getMessage());
} catch (Exception e) {
System.err.println("Failed to generate PDF: " + e.getMessage());
}
}
// Main method to demonstrate fetching HTML and generating a PDF
public static void main(String[] args) {
OkHttpToPdf converter = new OkHttpToPdf(); // Create an instance of OkHttpToPdf
converter.generatePdfFromUrl("https://ironpdf.com/java", "website.pdf"); // Fetch HTML and generate PDF
}
}
Explication du Code
Le code ci-dessus démontre comment récupérer du contenu HTML à partir d'une URL et le convertir en fichier PDF en utilisant les bibliothèques OkHttp et IronPDF en Java :
-
Instructions d'importation : Les bibliothèques nécessaires sont importées, notamment IronPDF pour la génération de PDF et OkHttp pour les requêtes HTTP.
-
Initialisation d'OkHttpClient : Une instance de
OkHttpClientest créée. -
fetchHtmlMéthode : Cette méthode récupère le contenu HTML à partir d'une URL spécifiée.- Une requête est construite avec l'URL fournie.
- La requête est exécutée et la réponse est obtenue.
- Si la réponse n'est pas concluante, une erreur
IOExceptionest levée. - Le corps de la réponse est renvoyé sous forme de chaîne.
-
generatePdfFromUrlMéthode : Cette méthode génère un PDF à partir du contenu HTML d'une URL spécifiée et l'enregistre dans un chemin de fichier donné.- Le contenu HTML est récupéré à l'aide de la méthode
fetchHtml. - Le contenu HTML est rendu sous forme de PDF en utilisant
IronPDF. - Le PDF est enregistré sur le chemin de fichier spécifié.
- Une gestion des erreurs appropriée est incluse pour la récupération du HTML et la génération du PDF.
- Le contenu HTML est récupéré à l'aide de la méthode
-
mainMéthode : Il s'agit du point d'entrée du programme.- Une instance de
OkHttpToPdfest créée. - La méthode
generatePdfFromUrlest appelée avec une URL et un chemin de fichier de sortie spécifiques.
- Une instance de
Sortie
Les données de l'URL sont récupérées à l'aide du client OkHttp puis rendues à l'aide d'IronPDF pour les convertir efficacement en PDF comme montré ci-dessous :

Pour plus d'informations détaillées sur IronPDF, veuillez visiter cette page de Documentation IronPDF. Veuillez également consulter cet Exemples de code IronPDF et cette page de Référence API IronPDF pour une utilisation plus poussée d'IronPDF.
Conclusion
OkHttp est un client HTTP polyvalent et puissant pour Java et Android qui simplifie le processus de création de requêtes réseau. Avec sa prise en charge des opérations synchrones et asynchrones, de la mise en commun des connexions, de la compression GZIP transparente, de la mise en cache et du HTTP/2, le client OkHttp est bien adapté à une large gamme de cas d'utilisation. En intégrant OkHttp dans vos applications Java, vous pouvez améliorer leurs performances, leur fiabilité et leur efficacité.
En intégrant OkHttp avec IronPDF, vous pouvez récupérer efficacement du contenu HTML à partir de sources web et le convertir en documents PDF. Cette approche est particulièrement utile pour les applications qui ont besoin de générer des rapports, de sauvegarder des pages web ou de convertir du contenu web en documents hors ligne.
Libérez le potentiel de la génération de PDF dans vos applications Java avec l'essai gratuit d'IronPDF, permettant une intégration transparente de la génération de PDF de qualité professionnelle dans vos projets. Téléchargez maintenant et élevez votre expérience de génération de PDF !




