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
扫描二维码添加微信 
  • ,每次淘宝领取淘宝优惠券,淘宝购物更优惠。现在添加微信,还可以领取机械键盘50元优惠券!添加微信后回复机械键盘即可领取!
    支持我们,就用微信淘宝!