logo

Classe Java.net.HttpURLConnection a Java

Classe HttpURLConnection és una classe abstracta que s'estén directament des de Classe URLConnection . Inclou tota la funcionalitat de la seva classe principal amb funcions addicionals específiques d'HTTP. HttpsURLConnection és una altra classe que s'utilitza per al protocol HTTPS més segur. 

És una de les opcions populars entre els desenvolupadors de Java per interactuar amb servidors web i l'equip de desenvolupament d'Android ha suggerit oficialment utilitzar-lo sempre que sigui possible. Més endavant il·lustrarem una implementació senzilla d'una aplicació interactiva que utilitza l'API Emotion de Microsoft per recuperar les puntuacions d'emoció d'una imatge mitjançant mètodes de la classe HttpURLConnection.

logotip de java

Constructor

    HttpURLConnection(URL u):Construeix la connexió httpurl a l'URL especificat

Mètodes (que no siguin a la classe URLConnection)

MètodeAcció realitzada
desconnectar()S'ha indicat que les sol·licituds al servidor són molt poc probables en el futur. 
getErrorStream()Obté el flux d'errors si el servidor no es pot connectar o si s'ha produït algun error. Pot contenir informació sobre com corregir l'error des del servidor.
getFollowRedirects()Retorna cert o fals depenent de la redirecció automàtica o no.
getHeaderField()Retorna l'enèsimo camp de capçalera o nul si no existeix. Substitueix el mètode getHeaderField de la classe URLConnection.
getInstanceFollowRedirects()Retorna vertader o fals en funció de si la redirecció automàtica de la instància està establerta o no.
getPermission()Recupera el permís necessari per connectar-se a un host i port de destinació.
getResponseCode()S'utilitza per recuperar l'estat de resposta del servidor.
getResponseMessage()Recupera el missatge de resposta.
getRequestMethod()Retorna el mètode de sol·licitud.
setInstanceFollowRedirects()Estableix si les sol·licituds de codi de resposta es redirigiran automàticament per aquesta instància de connexió URL HTTP. Substitueix el setFollowRedirects() més genèric
setRequestMethod()S'utilitza per definir el mètode de sol·licitud. El valor per defecte és GET
setFixedLengthStreamingMode()S'utilitza per establir la durada del contingut escrit a outputstream si es coneix per endavant.
setFollowRedirects()Estableix si una sol·licitud de codi de resposta 3xx es redirigeix ​​automàticament o no.
setChunkedStreamingMode()S'utilitza quan no es coneix la longitud del contingut. En lloc de crear un buffer de longitud fixa i escriure'l en un servidor, el contingut es divideix en trossos i després s'escriu. No tots els servidors admeten aquest mode. 
usingProxy()Retorna true si la connexió s'estableix mitjançant un proxy, sinó false

Consell: Seria bo entendre com llegir l'URL mitjançant aquesta classe HttpURLConnection per entendre millor la implementació següent.



Il·lustració: Tot el procés es pot entendre en poques paraules de la següent manera: 

Connexió al servidor de l'API de Microsoft emotion mitjançant l'URL següent 

https://westus.api.cognitive.microsoft.com/emotion/v1.0/recognize

Configuració de les propietats i mètodes per activar la sol·licitud: En aquest pas establim els mètodes i les propietats del nostre objecte de sol·licitud. Primer establim el mètode com a mètode de sol·licitud per ser invocat com a POST. També establim la propietat User-Agent per garantir que el servidor no bloquegi la nostra sol·licitud a causa d'un tipus de resposta inesperada que, d'altra manera, funcionaria bé en qualsevol navegador web.

Activa la sol·licitud http get: Després d'haver creat l'URL i d'haver creat un objecte HttpURLConnection, hem de fer una sol·licitud. Es pot fer explícitament mitjançant el mètode connect(). Es fa més aviat implícitament sempre que intentem utilitzar qualsevol missatge de resposta com ara getOutputStream() etc.

Escriure al servidor: Un cop obtenim el flux de sortida al servidor, pengem la nostra imatge al servidor per processar-la.

Llegint la resposta del servidor: Després d'obtenir un flux d'entrada, utilitzem el bufferedreader per sortir els resultats del servidor.

Implementació:  

Java
// 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());  }  }  } } 


Sortida:  

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}}]

Explicació de la sortida: Per provar aquest programa, cal proporcionar el nombre d'imatges a processar i després proporcionar l'URL de les imatges. Podeu deixar la propietat de longitud de contingut sense establir, ja que el servidor la gestionarà automàticament, però si coneixeu la longitud, modifiqueu-la cada vegada en conseqüència. En el codi font donat, ja que la longitud del contingut s'estableix en 83 bytes, s'ha d'utilitzar una URL d'aquesta mida. 

Sample URL: https://media.geeksforgeeks.org/wp-content/uploads/Brad_Pitt.webp

Nota: Com que és una aplicació interactiva es recomana executar-la en plataformes fora de línia. La biblioteca JSON també s'ha d'incloure a la ruta de compilació del projecte per executar aquesta aplicació.

q3 mesos
Crea un qüestionari