下面是一个使用Apache HttpClient消耗无限HTTP GET流的示例代码:
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
public class InfiniteHttpGetExample {
public static void main(String[] args) {
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpGet httpGet = new HttpGet("http://example.com/stream");
try {
HttpResponse response = httpClient.execute(httpGet);
HttpEntity entity = response.getEntity();
if (response.getStatusLine().getStatusCode() == 200 && entity != null) {
// 使用无限循环读取流
while (true) {
byte[] buffer = new byte[1024];
int bytesRead = entity.getContent().read(buffer);
if (bytesRead == -1) {
break; // 读取完毕,退出循环
}
String content = new String(buffer, 0, bytesRead, StandardCharsets.UTF_8);
System.out.println(content);
}
} else {
// 处理请求失败的情况
System.out.println("请求失败,状态码:" + response.getStatusLine().getStatusCode());
}
EntityUtils.consume(entity); // 确保资源被释放
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
httpClient.close(); // 关闭HttpClient
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
上述代码使用Apache HttpClient发送一个GET请求,并在获取到响应后,通过无限循环读取响应流的内容。每次读取的内容被转换为字符串并打印出来,直到读取完毕(即read()
方法返回-1)为止。
请注意,这只是一个示例代码,实际应用中可能需要根据具体需求做更多的处理,比如处理异常、优化读取性能等。