Java HttpURLConnection 类

当内容长度事先未知时,Java HttpURLConnection setChunkedStreamingMode() 方法允许在没有内部缓冲的情况下流式传输 HTTP 请求正文。在此模式下,使用分块传输编码来发送请求正文。请注意,并非所有 HTTP 服务器都支持此模式。

启用输出流时,无法自动处理身份验证和重定向。如果需要身份验证或重定向,则读取响应时将抛出 HttpRetryException。可以查询该异常,了解错误的详细信息。该方法必须在 URLConnection 连接之前调用。

声明

以下是 java.net.HttpURLConnection.setChunkedStreamingMode() 方法的声明

public void setChunkedStreamingMode(int chunklen)

参数

chunklen - 每个块中要写入的字节数。如果 chunklen 小于或等于 0,则将使用默认值。

返回值

异常

IllegalStateException - 如果 URLConnection 已连接或已启用不同的流模式。

示例 1

以下示例显示 Java HttpURLConnection setChunkedStreamingMode( 的用法) ) 使用 https 协议获取有效 url 的方法。在此示例中,我们将创建 URL 类的实例。使用 url.openConnection() 方法,我们获取 HttpURLConnection 实例。使用 getInputStream(),我们获取网站主页的内容并打印相同的内容 -

package com.yxjc123;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class HttpUrlConnectionDemo {
   public static void main(String [] args) {
      try {
         URL url = new URL("https://www.yxjc123.com/index1.htm?language=en#j2se");
         HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
         urlConnection.setChunkedStreamingMode(1000);  
		 urlConnection.setDoOutput(true);
         urlConnection.connect();  
         System.out.println("Connected.");  
         if(urlConnection.getInputStream() != null) {
            BufferedReader in = new BufferedReader(
               new InputStreamReader(urlConnection.getInputStream()));
            String content = "";
            String current;
            while((current = in.readLine()) != null) {
               content += current;
            }
            System.out.println(content);
         }else {
            System.out.println("Input Stream is null");
         }
         urlConnection.disconnect();  
         System.out.println("Disconnected.");  
      } catch (IOException e) {
         e.printStackTrace();
      }
   }
}

让我们编译并运行上面的程序,这将产生以下结果 -

输出

Connected.
<!DOCTYPE html><html lang="en"><head><title>Online Tutorials Library....
Disconnected.

示例 2

以下示例显示使用 Java HttpURLConnection setChunkedStreamingMode() 方法获取具有 http 协议的有效 url。在此示例中,我们将创建 URL 类的实例。使用 url.openConnection() 方法,我们获取 HttpURLConnection 实例。使用 getInputStream(),我们获取网站主页的内容并打印相同的内容 -

package com.yxjc123;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class HttpUrlConnectionDemo {
   public static void main(String [] args) {
      try {
         URL url = new URL("http://www.yxjc123.com/index1.htm?language=en#j2se");
         HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
         urlConnection.setChunkedStreamingMode(1000);  
		 urlConnection.setDoOutput(true);
         urlConnection.connect();  
         System.out.println("Connected.");  
         if(urlConnection.getInputStream() != null) {
            BufferedReader in = new BufferedReader(
               new InputStreamReader(urlConnection.getInputStream()));
            String content = "";
            String current;
            while((current = in.readLine()) != null) {
               content += current;
            }
            System.out.println(content);
         }else {
            System.out.println("Input Stream is null");
         }
         urlConnection.disconnect();  
         System.out.println("Disconnected.");  
      } catch (IOException e) {
         e.printStackTrace();
      }
   }
}

让我们编译并运行上面的程序,这将产生以下结果 -

输出

Connected.
<!DOCTYPE html><html lang="en"><head><title>Online Tutorials Library....
Disconnected.

示例 3

以下示例显示使用 Java HttpURLConnection setChunkedStreamingMode() 方法获取具有 http 协议的有效 url。在此示例中,我们将创建 URL 类的实例。使用 url.openConnection() 方法,我们获取 HttpURLConnection 实例。使用 getInputStream(),我们获取网站主页的内容并打印相同的内容 -

package com.yxjc123;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class HttpUrlConnectionDemo {
   public static void main(String [] args) {
      try {
         URL url = new URL("http://www.baidu.com");
         HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
         urlConnection.setChunkedStreamingMode(1000);  
		 urlConnection.setDoOutput(true);
         urlConnection.connect();  
         System.out.println("Connected.");  
         if(urlConnection.getInputStream() != null) {
            BufferedReader in = new BufferedReader(
               new InputStreamReader(urlConnection.getInputStream()));
            String content = "";
            String current;
            while((current = in.readLine()) != null) {
               content += current;
            }
            System.out.println(content);
         }else {
            System.out.println("Input Stream is null");
         }
         urlConnection.disconnect();  
         System.out.println("Disconnected.");  
      } catch (IOException e) {
         e.printStackTrace();
      }
   }
}

让我们编译并运行上面的程序,这将产生以下结果 -

输出

Connected.
java.io.IOException: Server returned HTTP response code: 405 for URL: http://www.baidu.com
	at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(Unknown Source)
	at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
	at com.yxjc123.HttpUrlConnectionDemo.main(HttpUrlConnectionDemo.java:18)