我正在尝试使用Apache HTTPClient构建"全双工"HTTP流式传输请求.
在我的第一次尝试中,我尝试使用以下请求代码:
URL url=new URL(/* code goes here */);
HttpPost request=new HttpPost(url.toString());
request.addHeader("Connection", "close");
PipedOutputStream requestOutput=new PipedOutputStream();
PipedInputStream requestInput=new PipedInputStream(requestOutput, DEFAULT_PIPE_SIZE);
ContentType requestContentType=getContentType();
InputStreamEntity requestEntity=new InputStreamEntity(requestInput, -1, requestContentType);
request.setEntity(requestEntity);
HttpEntity responseEntity=null;
HttpResponse response=getHttpClient().execute(request); // <-- Hanging here
try {
if(response.getStatusLine().getStatusCode() != 200)
throw new IOException("Unexpected status code: "+response.getStatusLine().getStatusCode());
responseEntity = response.getEntity();
}
finally {
if(responseEntity == null)
request.abort();
}
InputStream responseInput=responseEntity.getContent();
ContentType responseContentType;
if(responseEntity.getContentType() != null)
responseContentType = ContentType.parse(responseEntity.getContentType().getValue());
else
responseContentType = DEFAULT_CONTENT_TYPE;
Reader responseStream=decode(responseInput, responseContentType);
Writer …Run Code Online (Sandbox Code Playgroud) 我有一个InputStream和将要输出的数据的大小(HTTP 请求的响应)。由于空间复杂性的原因,我无法阅读全文。我想要的是将数据直接发送到新的请求正文中。我尝试使用 OkHttp 执行此操作,但无法使其工作。我不知道有任何其他 HTTP 客户端可以做到这一点。
如果可能的话,我想避免与Socket. 有什么建议吗?
编辑:添加的限制是该解决方案必须与 Java 8 一起使用
我正在使用 httpclient 4.5.5 我想获得高达 1 gb 的大文件作为响应。但好像
CloseableHttpResponse response = httpClient.execute(httpGet); HttpEntity entity = response.getEntity();
这将返回整个响应,因此在内存中包含整个响应并不好。有没有办法以流的形式获得响应?