sig*_*ned 6 java http apache-httpclient-4.x
我正在尝试使用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 requestStream=encode(requestOutput, getContentType());
Run Code Online (Sandbox Code Playgroud)
请求挂在上面指定的行.似乎代码试图在获得响应之前发送整个请求.回想起来,这是有道理的.但是,这不是我所希望的.:)
相反,我希望发送请求标头Transfer-Encoding: chunked,接收HTTP/1.1 200 OK带有Transfer-Encoding: chunked自己标头的响应标头,然后我将使用全双工流HTTP连接.
令人高兴的是,我的HTTPClient有另一个基于NIO的异步客户端,它有很好的用法示例(比如这个).我的问题是:
如果HTTPClient不支持这种模式,那么会有另一个HTTP客户端库吗?或者我应该计划编写一个(最小的)HTTP客户端来支持这种模式?
| 归档时间: |
|
| 查看次数: |
11014 次 |
| 最近记录: |