logo

Java.net.HttpURLConnection Class v Javě

Třída HttpURLConnection je abstraktní třída přímo vycházející z Třída URLConnection . Zahrnuje všechny funkce své nadřazené třídy s dalšími funkcemi specifickými pro HTTP. HttpsURLConnection je další třída, která se používá pro více zabezpečený protokol HTTPS. 

Je to jedna z oblíbených možností mezi vývojáři Java pro interakci s webovými servery a tým vývojářů Android oficiálně navrhl její použití, kdykoli je to možné. Později si ukážeme jednoduchou implementaci interaktivní aplikace, která využívá Microsoft emotion API k načítání skóre emocí z obrázku pomocí metod třídy HttpURLConnection.

Konstruktér

    HttpURLConnection(URL u):Vytvoří připojení httpurl na zadanou adresu URL

Metody (jiné než ve třídě URLConnection)

MetodaAkce provedena
odpojit()Označuje, že požadavky na server jsou v budoucnu vysoce nepravděpodobné. 
getErrorStream()Získá chybový proud, pokud se server nemůže připojit nebo došlo k nějaké chybě. Může obsahovat informace o tom, jak opravit chybu ze serveru.
getFollowRedirects()Vrátí true nebo false v závislosti na automatickém přesměrování nebo ne.
getHeaderField()Vrátí n-té pole záhlaví nebo hodnotu null, pokud neexistuje. Přepíše metodu getHeaderField třídy URLConnection.
getInstanceFollowRedirects()Vrátí hodnotu true nebo false v závislosti na tom, zda je nastaveno automatické přesměrování instance či nikoli.
getPermission()Načte oprávnění potřebná pro připojení k cílovému hostiteli a portu.
getResponseCode()Používá se k načtení stavu odpovědi ze serveru.
getResponseMessage()Načte zprávu s odpovědí.
getRequestMethod()Vrátí metodu požadavku.
setInstanceFollowRedirects()Nastavuje, zda budou požadavky na kód odpovědi automaticky přesměrovány touto instancí připojení HTTP URL. Přepíše obecnější setFollowRedirects()
setRequestMethod()Slouží k nastavení metody požadavku. Výchozí hodnota je GET
setFixedLengthStreamingMode()Používá se k nastavení délky obsahu napsaného ve výstupním proudu, pokud je předem známa.
setFollowRedirects()Nastavuje, zda bude požadavek na kód odezvy 3xx automaticky přesměrován nebo ne.
setChunkedStreamingMode()Používá se, když není známa délka obsahu. Místo vytvoření vyrovnávací paměti s pevnou délkou a zapsání na server je obsah rozdělen na kousky a poté zapsán. Ne všechny servery tento režim podporují. 
usingProxy()Vrátí hodnotu true, pokud je připojení navázáno pomocí serveru proxy, jinak false

Tip: Bylo by dobré porozumět tomu, jak číst URL pomocí této třídy HttpURLConnection, abyste lépe porozuměli níže uvedené implementaci.



Ilustrace: Celý proces lze ve zkratce chápat takto: 

Připojení k serveru Microsoft emotion API pomocí níže uvedené adresy URL 

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

Nastavení vlastností a metod pro spouštění požadavku: V tomto kroku nastavujeme metody a vlastnosti našeho objektu požadavku. Nejprve nastavíme metodu jako metodu požadavku, která má být vyvolána jako POST. Nastavili jsme také vlastnost User-Agent, abychom zajistili, že náš požadavek nebude serverem blokován kvůli neočekávanému typu odpovědi, která by jinak fungovala v jakémkoli webovém prohlížeči.

Spuštění požadavku http get: Poté, co jsme vytvořili adresu URL a vytvořili objekt HttpURLConnection, musíme skutečně spustit požadavek. Lze to explicitně provést metodou connect(). Je to spíše implicitně provedeno, kdykoli se pokusíme použít jakoukoli zprávu s odpovědí, jako je getOutputStream() atd.

Zápis na server: Jakmile získáme výstupní proud na server, nahrajeme náš obrázek na server ke zpracování.

Čtení odpovědi ze serveru: Po získání vstupního toku použijeme bufferedreader k výstupu výsledků ze serveru.

abeceda číslovaná

Implementace:  

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


výstup:  

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

Vysvětlení výstupu: Chcete-li tento program otestovat, měli byste zadat počet obrázků ke zpracování a poté zadat adresy URL obrázků. Vlastnost délky obsahu můžete ponechat nenastavenou, protože ji server zpracuje automaticky, ale pokud znáte délku, pokaždé ji odpovídajícím způsobem upravte. Protože je v daném zdrojovém kódu délka obsahu nastavena na 83 bajtů, měla by být použita adresa URL této velikosti. 

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

Poznámka: Jelikož se jedná o interaktivní aplikaci, doporučuje se ji spouštět na offline platformách. Knihovna JSON by měla být také zahrnuta do cesty sestavení projektu, aby bylo možné tuto aplikaci spustit.

Vytvořit kvíz