Klasa HttpURLConection je apstraktna klasa koja se izravno proteže iz Klasa URLConnection . Uključuje sve funkcije svoje nadređene klase s dodatnim značajkama specifičnim za HTTP. HttpsURLConnection je još jedna klasa koja se koristi za sigurniji HTTPS protokol.
To je jedan od popularnih izbora među Java programerima za interakciju s web poslužiteljima, a android razvojni tim službeno je predložio njegovu upotrebu gdje god je to moguće. Kasnije ćemo ilustrirati jednostavnu implementaciju interaktivne aplikacije koja koristi Microsoftov API za emocije za dohvaćanje rezultata emocija sa slike pomoću metoda klase HttpURLConnection.
nick pulos crna munja
Konstruktor
Metode (osim u klasi URLConnection)
| metoda | Radnja izvršena |
|---|---|
| prekinuti vezu() | Naznačeno je da su zahtjevi prema poslužitelju malo vjerojatni u budućnosti. |
| getErrorStream() | Dobiva tok pogreške ako se poslužitelj ne može spojiti ili je došlo do neke pogreške. Može sadržavati informacije o tome kako popraviti grešku s poslužitelja. |
| getFollowRedirects() | Vraća true ili false ovisno o automatskom preusmjeravanju ili ne. |
| getHeaderField() | Vraća n-to polje zaglavlja ili null ako ne postoji. Ona nadjačava metodu getHeaderField klase URLConnection. |
| getInstanceFollowRedirects() | Vraća true ili false ovisno o tome je li automatsko preusmjeravanje instance postavljeno ili ne. |
| getPermission() | Dohvaća dopuštenje potrebno za povezivanje s odredišnim hostom i priključkom. |
| getResponseCode() | Koristi se za dohvaćanje statusa odgovora s poslužitelja. |
| getResponseMessage() | Dohvaća poruku odgovora. |
| getRequestMethod() | Vraća metodu zahtjeva. |
| setInstanceFollowRedirects() | Postavlja hoće li se zahtjevi koda odgovora automatski preusmjeravati ovom instancom HTTP URL veze. Nadjačava općenitiji setFollowRedirects() |
| setRequestMethod() | Koristi se za postavljanje metode zahtjeva. Zadano je GET |
| setFixedLengthStreamingMode() | Koristi se za postavljanje duljine sadržaja zapisanog na izlaznom toku ako je unaprijed poznat. |
| setFollowRedirects() | Postavlja hoće li se zahtjev za kod odgovora 3xx preusmjeriti automatski ili ne. |
| setChunkedStreamingMode() | Koristi se kada duljina sadržaja nije poznata. Umjesto stvaranja međuspremnika fiksne duljine i njegovog pisanja na poslužitelj, sadržaj se rastavlja na dijelove i potom zapisuje. Ne podržavaju svi poslužitelji ovaj način rada. |
| koristećiProxy() | Vraća true ako je veza uspostavljena pomoću proxyja else false |
Savjet: Bilo bi dobro razumjeti kako čitati URL pomoću ove klase HttpURLConnection za bolje razumijevanje donje implementacije.
Ilustracija: Cijeli proces može se ukratko shvatiti na sljedeći način:
Povezivanje s poslužiteljem Microsoft emotion API-ja pomoću donjeg URL-a
https://westus.api.cognitive.microsoft.com/emotion/v1.0/recognize
Postavljanje svojstava i metoda za pokretanje zahtjeva: U ovom koraku postavljamo metode i svojstva našeg objekta zahtjeva. Prvo postavljamo metodu kao metodu zahtjeva koja se poziva kao POST. Također smo postavili svojstvo User-Agent kako bismo osigurali da naš zahtjev ne blokira poslužitelj zbog neočekivane vrste odgovora koji bi inače dobro funkcionirao na bilo kojem web pregledniku.
Aktiviranje http get zahtjeva: Nakon što smo kreirali URL i kreirali objekt HttpURLConnection, moramo pokrenuti zahtjev. To se eksplicitno može učiniti metodom connect(). To se radi implicitno kad god pokušamo upotrijebiti bilo koju poruku odgovora kao što je getOutputStream() itd.
Pisanje na poslužitelj: Nakon što dobijemo izlazni tok na poslužitelj, učitavamo našu sliku na poslužitelj za obradu.
Čitanje odgovora s poslužitelja: Nakon dobivanja ulaznog toka koristimo bufferedreader za izlaz rezultata s poslužitelja.
Implementacija:
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()); } } } }
Izlaz:
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}}] Objašnjenje izlaza: Za testiranje ovog programa potrebno je navesti broj slika za obradu i zatim navesti URL slike. Svojstvo duljine sadržaja možete ostaviti nepostavljenim jer bi poslužitelj njime upravljao automatski, ali ako znate duljinu, promijenite je svaki put u skladu s tim. Budući da je duljina sadržaja postavljena na 83 bajta, u danom izvornom kodu trebao bi se koristiti URL te veličine.
Sample URL: https://media.geeksforgeeks.org/wp-content/uploads/Brad_Pitt.webp
Bilješka: Budući da se radi o interaktivnoj aplikaciji, savjetuje se da je pokrenete na izvanmrežnim platformama. JSON biblioteka bi također trebala biti uključena u put izgradnje projekta za pokretanje ove aplikacije.
broj u string javaNapravi kviz