Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Java: libreria client HTTP/2

Un esempio che mostra come interagire con un server HTTP2 in Java, utilizzando la libreria okhttp per implementare un'applicazione client.
Un esempio che mostra come interagire con un server HTTP2 in Java, utilizzando la libreria okhttp per implementare un'applicazione client.
Link copiato negli appunti

Diamo una rapida panoramica di alcune librerie che è possibile utilizzare per costruire client HTTP/2 con diversi linguaggi di programmazione, iniziando in questa lezione con Java. Abbiamo preso in considerazione solo quelle librerie che implementano la versione definitiva del protocollo.

Se si sta utilizzando un certificato self-signed, sarà necessario installare tra i certificati di sistema il file PEM generato, poichè in Java non è possibile disabilitarne la verifica.

Java

Per realizzare client scritti in linguaggio Java è possibile utilizzare la libreria okhttp, reperibile su GitHub. La libreria è compatibile anche con Android, e consente di realizzare client per tutte le revisioni di HTTP utilizzate, non solo HTTP/2; per il supporto ad HTTP/2 è richiesta la versione 2.3 o superiore della libreria.

Nell'esempio che segue vedremo sia il prelevamento di una risorsa binaria, sia quello di una risorsa testuale. Il codice sorgente del client che analizzeremo è allegato a questa lezione e disponibile sempre su GitHub.

La creazione del client avviene istanziando un nuovo oggetto OkHttpClient:

final OkHttpClient client = new OkHttpClient();

In seguito, è necessario istanziare un oggetto Request per poter aprire la connessione.

Request request = new Request.Builder()
    .url("https://10.211.55.17:3000/index.html")
    .build();

La connessione viene realmente effettuata con il metodo newCall del client. La risposta va memorizzata in un apposito oggetto Response:

Response response = client.newCall(request).execute();

La risposta sarà accessibile sotto forma di stream. Nel caso ci si aspetti un contenuto testuale, se ne potrà effettuare la lettura linea per linea come segue:

BufferedReader reader = new BufferedReader(response.body().charStream());
String result, line = reader.readLine();
result = line;
while ((line = reader.readLine()) != null) {
    // operazione sulla singola linea
}

Nel caso di risposta binaria, invece, si leggerà byte a byte (nel nostro esempio, 1 KB per iterazione):

// Per un contenuto binario...
BufferedInputStream input = new BufferedInputStream(response.body().byteStream());
OutputStream output = new FileOutputStream(outputFile);
byte[] data = new byte[1024]; // leggiamo 1 KB alla volta
int count = 0;
while ((count = input.read(data)) != -1) {
    // operazione sui dati letti
}

Installare il certificato self-signed nel client

Se è stato generato un certificato self-signed sul server HTTP/2 come precedentemente descritto, non sarà possibile effettuare la connessione. Verrà infatti generata un’eccezione simile alla seguente:

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

Per installare rapidamente il certificato si può utilizzare il programma InstallCert, il cui sorgente è disponibile a questo link.

Il programma, una volta compilato, va eseguito con i privilegi di amministratore, se il JRE è installato in modalità system-wide.

Nel caso del client d’esempio, possiamo procedere in questo modo:

sudo java it.html.http2client.InstallCert 10.211.55.17:3000

Ti consigliamo anche