logo

Java.net.HttpURLConnection Клас в Java

Клас HttpURLConnection е абстрактен клас, който се разширява директно от Клас URLConnection . Той включва цялата функционалност на своя родителски клас с допълнителни специфични за HTTP функции. HttpsURLConnection е друг клас, който се използва за по-сигурния HTTPS протокол. 

Това е един от популярните избори сред разработчиците на Java за взаимодействие с уеб сървъри и екипът за разработка на Android официално предложи използването му, когато е възможно. По-късно ще илюстрираме проста реализация на интерактивно приложение, което използва API за емоции на Microsoft за извличане на резултатите от емоциите от изображение с помощта на методите на класа HttpURLConnection.

Конструктор

    HttpURLConnection(URL u):Конструира httpurl връзка към определен URL адрес

Методи (различни от клас URLConnection)

МетодИзвършено действие
прекъсване на връзката ()Посочено е, че заявките към сървъра са много малко вероятни в бъдеще. 
getErrorStream()Получава потока за грешка, ако сървърът не може да бъде свързан или е възникнала грешка. Може да съдържа информация как да коригирате грешката от сървъра.
getFollowRedirects()Връща true или false в зависимост от автоматичното пренасочване или не.
getHeaderField()Връща n-тото заглавно поле или нула, ако не съществува. Той замества метода getHeaderField на класа URLConnection.
getInstanceFollowRedirects()Връща true или false в зависимост от това дали автоматичното пренасочване на екземпляра е зададено или не.
getPermission()Извлича разрешението, необходимо за свързване към целеви хост и порт.
getResponseCode()Използва се за извличане на състоянието на отговора от сървъра.
getResponseMessage()Извлича съобщението за отговор.
getRequestMethod()Връща метода на заявката.
setInstanceFollowRedirects()Задава дали заявките за код за отговор да се пренасочват автоматично от този екземпляр на HTTP URL връзка. Той замества по-генеричния setFollowRedirects()
setRequestMethod()Използва се за задаване на метода на заявка. По подразбиране е GET
setFixedLengthStreamingMode()Използва се за задаване на дължината на съдържанието, записано в изходния поток, ако е известно предварително.
setFollowRedirects()Задава дали заявка за код за отговор 3xx да се пренасочва автоматично или не.
setChunkedStreamingMode()Използва се, когато дължината на съдържанието не е известна. Вместо да се създаде буфер с фиксирана дължина и да се запише на сървър, съдържанието се разбива на части и след това се записва. Не всички сървъри поддържат този режим. 
използване на прокси()Връща true, ако връзката е установена чрез прокси, else false

Съвет: Би било добре да имате разбиране как да четете URL с помощта на този клас HttpURLConnection за по-добро разбиране на изпълнението по-долу.



Илюстрация: Целият процес може да се разбере накратко, както следва: 

Свързване към сървъра на Microsoft emotion API чрез URL адреса по-долу 

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

Задаване на свойствата и методите за задействане на заявката: В тази стъпка задаваме методите и свойствата на нашия обект на заявка. Първо задаваме метода като метод на заявка, който да бъде извикан като POST. Също така задаваме свойството User-Agent, за да гарантираме, че заявката ни няма да бъде блокирана от сървъра поради неочакван тип отговор, който иначе би работил добре на всеки уеб браузър.

Задействане на http get заявката: След като сме създали URL адреса и сме създали обект HttpURLConnection, трябва действително да задействаме заявка. Може изрично да се направи чрез метода connect(). Това се прави по-скоро имплицитно всеки път, когато се опитаме да използваме всяко съобщение за отговор, като getOutputStream() и т.н.

Писане на сървър: След като получим изходния поток към сървъра, ние качваме нашето изображение на сървъра за обработка.

Четене на отговора от сървъра: След получаване на входен поток ние използваме bufferedreader за извеждане на резултатите от сървъра.

Изпълнение:  

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


Изход:  

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

Обяснение на изхода: За да тествате тази програма, трябва да предоставите броя на изображенията за обработка и след това да посочите URL адреса на изображенията. Можете да оставите свойството за дължина на съдържанието ненастроено, тъй като сървърът ще го обработва автоматично, но ако знаете дължината, променяйте го всеки път съответно. В дадения изходен код, тъй като дължината на съдържанието е зададена на 83 байта, трябва да се използва URL адрес с този размер. 

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

Забележка: Тъй като е интерактивно приложение, препоръчително е да го стартирате на офлайн платформи. Библиотеката JSON също трябва да бъде включена в пътя за изграждане на проекта, за да стартира това приложение.

Създаване на тест