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
Metody (jiné než ve třídě URLConnection)
| Metoda | Akce 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