Classe HttpURLConnection est une classe abstraite s'étendant directement de Classe URLConnection . Il inclut toutes les fonctionnalités de sa classe parent avec des fonctionnalités supplémentaires spécifiques à HTTP. HttpsURLConnection est une autre classe utilisée pour le protocole HTTPS plus sécurisé.
C'est l'un des choix populaires parmi les développeurs Java pour interagir avec les serveurs Web et l'équipe de développement Android a officiellement suggéré de l'utiliser dans la mesure du possible. Plus tard, nous illustrerons une implémentation simple d'une application interactive qui utilise l'API Microsoft emotion pour récupérer les scores d'émotion d'une image à l'aide des méthodes de la classe HttpURLConnection.
chaîne.replaceall java
Constructeur
Méthodes (autres que dans la classe URLConnection)
| Méthode | Action effectuée |
|---|---|
| déconnecter() | Indique que les requêtes adressées au serveur sont très peu probables à l'avenir. |
| getErrorStream() | Obtient le flux d'erreurs si le serveur ne peut pas être connecté ou si une erreur s'est produite. Il peut contenir des informations sur la manière de corriger l'erreur du serveur. |
| getFollowRedirects() | Renvoie vrai ou faux selon la redirection automatique ou non. |
| getHeaderField() | Renvoie le nième champ d'en-tête ou null s'il n'existe pas. Il remplace la méthode getHeaderField de la classe URLConnection. |
| getInstanceFollowRedirects() | Renvoie vrai ou faux selon que la redirection automatique d'instance est définie ou non. |
| obtenirPermission() | Récupère l’autorisation requise pour se connecter à un hôte et un port de destination. |
| getResponseCode() | Utilisé pour récupérer l'état de la réponse du serveur. |
| getResponseMessage() | Récupère le message de réponse. |
| getRequestMethod() | Renvoie la méthode de requête. |
| setInstanceFollowRedirects() | Définit si les demandes de code de réponse doivent être automatiquement redirigées par cette instance de connexion URL HTTP. Il remplace le setFollowRedirects() plus générique. |
| setRequestMethod() | Utilisé pour définir la méthode de requête. La valeur par défaut est GET |
| setFixedLengthStreamingMode() | Utilisé pour définir la longueur du contenu écrit sur le flux de sortie s'il est connu à l'avance. |
| setFollowRedirects() | Définit si une demande de code de réponse 3xx doit être redirigée automatiquement ou non. |
| setChunkedStreamingMode() | Utilisé lorsque la longueur du contenu n'est pas connue. Au lieu de créer un tampon de longueur fixe et de l'écrire sur un serveur, le contenu est divisé en morceaux puis écrit. Tous les serveurs ne prennent pas en charge ce mode. |
| en utilisantProxy() | Renvoie vrai si la connexion est établie à l'aide d'un proxy, sinon faux |
Conseil: Il serait bon de comprendre comment lire l'URL à l'aide de cette classe HttpURLConnection pour une meilleure compréhension de l'implémentation ci-dessous.
Illustration: L’ensemble du processus peut être compris en quelques mots comme suit :
Connexion au serveur de l'API Microsoft emotion en utilisant l'URL ci-dessous
https://westus.api.cognitive.microsoft.com/emotion/v1.0/recognize
Définition des propriétés et des méthodes de déclenchement de la requête : Dans cette étape, nous définissons les méthodes et les propriétés de notre objet de requête. Nous définissons d’abord la méthode comme méthode de requête à appeler en tant que POST. Nous définissons également la propriété User-Agent pour garantir que notre demande n'est pas bloquée par le serveur en raison d'un type de réponse inattendu qui, autrement, fonctionnerait correctement sur n'importe quel navigateur Web.
texte d'habillage CSS
Lancer la requête http get : Après avoir créé l'URL et créé un objet HttpURLConnection, nous devons réellement lancer une requête. Cela peut être explicitement fait par la méthode connect(). Cela se fait plutôt implicitement chaque fois que nous essayons d'utiliser un message de réponse tel que getOutputStream() etc.
Écrire sur le serveur : Une fois que nous obtenons le flux de sortie sur le serveur, nous téléchargeons notre image sur le serveur pour traitement.
Lecture de la réponse du serveur : Après avoir obtenu un flux d'entrée, nous utilisons le bufferedreader pour afficher les résultats du serveur.
Mise en œuvre:
boucle for dans un script shellJava
// Java Program to Illustrate Use // of HttpURLConnection Class // to Retrieve Emotion score of Image // Using Microsoft Emotion API // Importing required classes import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; import org.json.simple.JSONObject; // Main class // httpconclass class public class GFG { // Main driver method public static void main(String args[]) throws IOException { // Reading input via BufferedReader class BufferedReader br = new BufferedReader( new InputStreamReader(System.in)); int n = Integer.parseInt(br.readLine()); String key = '833921b016964f95905442e0fab0c229'; JSONObject ezm; while (n-- > 0) { String image = br.readLine(); ezm = new JSONObject(); ezm.put('url' image); // Try block to check for exceptions try { // URL for microsoft cognitive server. URL url = new URL( 'https://westus.api.cognitive.microsoft.com/emotion/v1.0/recognize'); HttpURLConnection con = (HttpURLConnection) url.openConnection(); // Setting the request method and // properties. con.setRequestMethod('POST'); con.setRequestProperty( 'Ocp-Apim-Subscription-Key' key); con.setRequestProperty('Content-Type' 'application/json'); con.setRequestProperty('Accept' 'application/json'); // As we know the length of our content // the following function sets the fixed // streaming mode length 83 bytes. If // content length not known comment the // below line. con.setFixedLengthStreamingMode(83); // Setting the auto redirection to true HttpURLConnection.setFollowRedirects(true); // Overriding the default value set by // the static method setFollowRedirect above con.setInstanceFollowRedirects(false); // Setting the doOutput to true for now con.setDoOutput(true); OutputStream out = con.getOutputStream(); // System.out.println(ezm.toString().getBytes().length); // Writing on the output stream out.write(ezm.toString().getBytes()); InputStream ip = con.getInputStream(); BufferedReader br1 = new BufferedReader( new InputStreamReader(ip)); // Printing the response code // and response message from server. System.out.println('Response Code:' + con.getResponseCode()); System.out.println( 'Response Message:' + con.getResponseMessage()); // Note: Uncomment the following line to // print the status of FollowRedirect // property // System.out.println('FollowRedirects:' // + // HttpURLConnection.getFollowRedirects()); // Printing the status of // instanceFollowRedirect property System.out.println( 'InstanceFollowRedirects:' + con.getInstanceFollowRedirects()); // Printing the 1st header field System.out.println('Header field 1:' + con.getHeaderField(1)); // Printing if usingProxy flag set or not System.out.println('Using proxy:' + con.usingProxy()); StringBuilder response = new StringBuilder(); String responseSingle = null; while ((responseSingle = br1.readLine()) != null) { response.append(responseSingle); } String xx = response.toString(); System.out.println(xx); } // Catch block to handle exceptions catch (Exception e) { // Display exception/s on console System.out.println(e.getMessage()); } } } }
Sortir:
Response Code:200 Response Message:OK FollowRedirects:true InstanceFollowRedirects:false Header field 1:no-cache Using proxy:false [{'faceRectangle':{'height':134'left':62'top':86'width':134}'scores':{'anger':4.105452E- 14'contempt':1.240792E-11'disgust':2.58925052E-11'fear':1.82401266E-17'happiness':1.0 'neutral':2.487733E-10'sadness':6.02089044E-14'surprise':2.665974E-12}}] Explication de la sortie : Pour tester ce programme, il faut fournir le nombre d'images à traiter puis fournir l'URL des images. Vous pouvez laisser la propriété de longueur du contenu non définie car le serveur la gérera automatiquement, mais si vous connaissez la longueur, modifiez-la à chaque fois en conséquence. Dans le code source donné, comme la longueur du contenu est définie sur 83 octets, une URL de cette taille doit être utilisée.
Sample URL: https://media.geeksforgeeks.org/wp-content/uploads/Brad_Pitt.webp
Note: Comme il s'agit d'une application interactive, il est conseillé de l'exécuter sur des plateformes hors ligne. La bibliothèque JSON doit également être incluse dans le chemin de construction du projet pour exécuter cette application.
Créer un quiz