Trieda HttpURLConnection je abstraktná trieda priamo vychádzajúca z Trieda URLConnection . Zahŕňa všetky funkcie svojej nadradenej triedy s ďalšími funkciami špecifickými pre HTTP. HttpsURLConnection je ďalšia trieda, ktorá sa používa pre bezpečnejší protokol HTTPS.
Je to jedna z obľúbených možností medzi vývojármi Java na interakciu s webovými servermi a tím vývojárov Android oficiálne navrhol používať ju všade, kde je to možné. Neskôr si ukážeme jednoduchú implementáciu interaktívnej aplikácie, ktorá využíva Microsoft emotion API na získanie skóre emócií z obrázka pomocou metód triedy HttpURLConnection.
tostring java
Konštruktér
Metódy (iné ako v triede URLConnection)
| Metóda | Akcia vykonaná |
|---|---|
| odpojiť () | Označuje, že požiadavky na server sú v budúcnosti vysoko nepravdepodobné. |
| getErrorStream() | Získa tok chýb, ak sa server nemôže pripojiť alebo sa vyskytla nejaká chyba. Môže obsahovať informácie o tom, ako opraviť chybu zo servera. |
| getFollowRedirects() | Vráti hodnotu true alebo false v závislosti od automatického presmerovania alebo nie. |
| getHeaderField() | Vráti n-té pole hlavičky alebo hodnotu null, ak neexistuje. Prepíše metódu getHeaderField triedy URLConnection. |
| getInstanceFollowRedirects() | Vráti hodnotu true alebo false v závislosti od toho, či je nastavené automatické presmerovanie inštancie alebo nie. |
| getPermission() | Získa povolenie potrebné na pripojenie k cieľovému hostiteľovi a portu. |
| getResponseCode() | Používa sa na získanie stavu odpovede zo servera. |
| getResponseMessage() | Načíta správu s odpoveďou. |
| getRequestMethod() | Vráti metódu požiadavky. |
| setInstanceFollowRedirects() | Nastavuje, či budú požiadavky na kód odpovede automaticky presmerované touto inštanciou pripojenia HTTP URL. Prepíše všeobecnejšie setFollowRedirects() |
| setRequestMethod() | Používa sa na nastavenie spôsobu požiadavky. Predvolená hodnota je GET |
| setFixedLengthStreamingMode() | Používa sa na nastavenie dĺžky obsahu napísaného na výstupnom toku, ak je vopred známa. |
| setFollowRedirects() | Nastavuje, či sa požiadavka na kód odpovede 3xx automaticky presmeruje alebo nie. |
| setChunkedStreamingMode() | Používa sa, keď nie je známa dĺžka obsahu. Namiesto vytvorenia vyrovnávacej pamäte s pevnou dĺžkou a jej zápisu na server sa obsah rozdelí na kúsky a potom sa zapíše. Nie všetky servery podporujú tento režim. |
| usingProxy() | Vráti hodnotu true, ak je spojenie nadviazané pomocou servera proxy, inak hodnotu false |
Tip: Bolo by dobré pochopiť, ako čítať URL pomocou tejto triedy HttpURLConnection, aby ste lepšie pochopili nižšie uvedenú implementáciu.
Ilustrácia: Celý proces možno v skratke pochopiť takto:
Pripojenie k serveru Microsoft emotion API pomocou nižšie uvedenej adresy URL
https://westus.api.cognitive.microsoft.com/emotion/v1.0/recognize
Nastavenie vlastností a metód pre spustenie požiadavky: V tomto kroku nastavíme metódy a vlastnosti objektu našej požiadavky. Najprv nastavíme metódu ako metódu požiadavky, ktorá sa má vyvolať ako POST. Nastavili sme tiež vlastnosť User-Agent, aby sme zabezpečili, že naša požiadavka nebude serverom zablokovaná z dôvodu neočakávaného typu odpovede, ktorá by inak fungovala v akomkoľvek webovom prehliadači.
porovnávanie reťazcov java
Spustenie žiadosti http get: Po vytvorení adresy URL a vytvorení objektu HttpURLConnection musíme skutočne spustiť požiadavku. Dá sa to urobiť explicitne metódou connect(). Je to skôr implicitne vykonané vždy, keď sa pokúsime použiť akúkoľvek správu s odpoveďou, ako je getOutputStream() atď.
Zápis na server: Keď získame výstupný tok na server, odošleme náš obrázok na server na spracovanie.
Čítanie odpovede zo servera: Po získaní vstupného toku použijeme bufferedreader na výstup výsledkov zo servera.
Implementácia:
výnimka java throwJava
// 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}}] Vysvetlenie výstupu: Ak chcete otestovať tento program, mali by ste zadať počet obrázkov na spracovanie a potom poskytnúť adresy URL obrázkov. Vlastnosť dĺžky obsahu môžete ponechať nenastavenú, pretože server by ju spracoval automaticky, ale ak poznáte dĺžku, vždy ju zodpovedajúcim spôsobom upravte. Keďže v danom zdrojovom kóde je dĺžka obsahu nastavená na 83 bajtov, mala by sa použiť adresa URL tejto veľkosti.
Sample URL: https://media.geeksforgeeks.org/wp-content/uploads/Brad_Pitt.webp
Poznámka: Keďže ide o interaktívnu aplikáciu, odporúča sa spustiť ju na offline platformách. Knižnica JSON by mala byť zahrnutá aj do cesty zostavenia projektu, aby bolo možné túto aplikáciu spustiť.
Vytvoriť kvíz