• Tags ,
  •         
  • www.breakyizhan.com
  •    

    HttpURLConnection类是直接从URLConnection类扩展的抽象类。它包含其父类的所有功能以及其他HTTP特定功能。HttpsURLConnection是另一个用于更安全的HTTPS协议的类。
    在哪里使用?
    它是Java开发人员与Web服务器交互的流行选择之一,而开发团队已经正式建议尽可能使用它。
    最后,本文演示了一个交互式应用程序的简单实现,该应用程序使用microsoft emotion api从HttpURLConnection类的方法中检索图像的情感分数。

    Java.net.HttpURLConnection构造函数

    Syntax : protected HttpURLConnection(URL u):
    Parameters : 
    u - the url
    Constructs the httpurlconnection to specified URL.

    Java.net.HttpURLConnection的方法

    1. getResponseCode():用于从服务器检索响应状态。
      Syntax : protected int getResponseCode()
      1xx : Information
      2xx : Success
      3xx : Redirection
      4xx : Client error
      5xx : Server error
    2. setRequestMethod():用于设置请求方法。默认是GET。
      Syntax :  protected void setRequestMethod(String method) 
                                      throws ProtocolException
      Parameters: 
      method : Must be any one of the following-
      GET, POST, HEAD, OPTIONS, PUT, DELETE, TRACE
      Throws :
      ProtocolException - If the method is not valid for http.
    3. getRequestMethod():返回请求方法。
      Syntax :  protected String getRequestMethod()
    4. getResponseMessage():检索响应消息。
      Syntax :  public String getResponseMessage()           
      200 - OK
      404 - NOT FOUND
    5. getHeaderField():返回第n个头字段,如果不存在则返回null。它覆盖了URLConnection类的getHeaderField方法。
      Syntax :  public String getResponseMessage()           
      200 - OK
      404 - NOT FOUND
    6. setFixedLengthStreamingMode():用于设置在输出流上写入的内容的长度(如果事先已知)。
      句法 :  public void setFixedLengthStreamingMode(long n / int n)
                                             throws IllegalStateException          
      
      参数: 
      n:要写入的内容的长度。
      抛出:
      IllegalStateException:如果未写入指定的内容长度 
      的OutputStream。
      
    7. setFollowRedirects():设置是否自动重定向3xx响应代码请求。
      Syntax :  public void setFollowRedirects(boolean b)           
      Parameters: 
      b : Must be true or false.
    8. getFollowRedirects():根据自动重定向返回true或false。
      语法: public static boolean getFollowRedirects()           
      
    9. disconnect():表示将来很可能不会向服务器发送请求。
      语法: public void disconnect()           
      
    10. usingProxy():如果使用代理建立连接,则返回true,否则返回false。
      语法: public boolean usingProxy()           
      
    11. setChunkedStreamingMode():当内容长度未知时使用此模式。内容被分解成块然后写入,而不是创建固定长度的缓冲区并将其写入服务器。并非所有服务器都支持此模式。
      语法: public void setChunkedStreamingMode(int n)
                                             throws IllegalStateException          
      参数: 
      n:写在每个块中的长度。
      抛出:
      IllegalStateException:如果启用了某种不同的流模式。
      
    12. getPermission():检索连接到目标主机和端口所需的权限。
      语法: public Permission getPermission()           
      
    13. getErrorStream():如果无法连接服务器或发生某些错误,则获取错误流。它可以包含有关如何从服务器修复错误的信息。
      语法: public InputStream getErrorStream()           
      
    14. setInstanceFollowRedirects():设置此实例的httpURLconnection是否自动重定向3xx响应代码请求。它会覆盖更通用的setFollowRedirects
      参数。如果未指定,则实例将基于setFollowRedirects()重定向。

      语法: public void setFollowRedirects(boolean b)           
       参数: 
      b:必须是真或假。
      
    15. getInstanceFollowRedirects():根据自动实例重定向设置或不设置,返回true或false。
      语法: public boolean getFollowRedirects()           
      
      

    有关从其继承的所有方法,请参阅URLConnection文章。

    Java中的Java.net.HttpURLConnection的示例

    // Java program to illustrate the 
    // use of HttpURLConnection 
    // to retrieve the emotion score 
    // of image using Microsoft Emotion api 
    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; 
    public class httpconclass 
    { 
    public static void main(String args[]) throws IOException 
    { 
    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
    { 
    // url for microsoft congnitive server. 
    URL url = 
    new URL("https://westus.api.cognitive.microsoft.com/emotion/v1.0/recognize"); 
    HttpURLConnection con = 
    (HttpURLConnection) url.openConnection(); 
    // set 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); 
    // set the auto redirection to true 
    HttpURLConnection.setFollowRedirects(true); 
    // override the default value set by 
    // the static method setFollowRedirect above 
    con.setInstanceFollowRedirects(false); 
    // set the doOutput to true. 
    con.setDoOutput(true); 
    OutputStream out = con.getOutputStream(); 
    // System.out.println(ezm.toString().getBytes().length); 
    // write on the output stream 
    out.write(ezm.toString().getBytes()); 
    InputStream ip = con.getInputStream(); 
    BufferedReader br1 = 
    new BufferedReader(new InputStreamReader(ip)); 
    // Print the response code 
    // and response message from server. 
    System.out.println("Response Code:"
    + con.getResponseCode()); 
    System.out.println("Response Message:"
    + con.getResponseMessage()); 
    // uncomment the following line to 
    // print the status of 
    // FollowRedirect property. 
    // System.out.println("FollowRedirects:" 
    //			 + HttpURLConnection.getFollowRedirects()); 
    // to print the status of 
    // instanceFollowRedirect property. 
    System.out.println("InstanceFollowRedirects:"
    + con.getInstanceFollowRedirects()); 
    // to print the 1st header field. 
    System.out.println("Header field 1:"
    + con.getHeaderField(1)); 
    // to print 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 (Exception e) 
    { 
    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}}]

    注意:由于它是一个交互式应用程序,建议在脱机平台上运行它。Json库也应该包含在项目的构建路径中以运行此应用程序。它可以从sourceforge.com下载。

    说明:
    要测试此程序,应该提供要处理的图像数量,然后提供图像的URL。您可以保留内容长度属性,因为服务器会自动处理它,但如果您知道长度,请相应地每次修改它。
    在给定的源代码中,由于contentlngth设置为83字节,因此应使用该大小的url。示例URL-https://www.breakyizhan.com/wp-content/uploads/2018/10/muluexample.png

    有关Microsoft情感api的详细说明。整个过程可以简单地理解如下: -

    1. 使用url连接到microsoft emotion API服务器: https //westus.api.cognitive.microsoft.com/emotion/v1.0/recognize。
    2. 设置触发请求的属性和方法:在此步骤中,我们设置请求对象的方法和属性。首先,我们将方法设置为要作为POST调用的请求方法。我们还设置了User-Agent属性,以确保我们的请求不被服务器阻止,因为意外的响应类型在任何Web浏览器上都可以正常工作。
    3. 触发http get请求:在我们创建了url并创建了一个HttpURLConnection对象之后,我们必须实际触发一个请求。它可以通过connect()方法明确地完成。每当我们尝试使用任何响应消息(例如getOutputStream()等)时,它都会隐式地完成。
    4. 写入服务器: -一旦我们获得服务器的输出流,我们将图像上传到服务器进行处理。
    5. 从服务器读取响应:获取输入流后,我们使用bufferedreader从服务器输出结果。
     
    转载请保留页面地址:https://www.breakyizhan.com/java/6609.html