Fab*_*bii 12 java outputstream httpclient
我如何OutputStream使用org.apache.http.impl.client.DefaultHttpClient?
我想写一个长字符串到输出流.
使用HttpURLConnection你会像这样实现它:
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
OutputStream out = connection.getOutputStream();
Writer wout = new OutputStreamWriter(out);
writeXml(wout);
Run Code Online (Sandbox Code Playgroud)
有没有使用DefaultHttpClient类似于我上面的方法?我如何写一个OutputStream使用DefaultHttpClient而不是HttpURLConnection?
例如
DefaultHttpClient client = new DefaultHttpClient();
OutputStream outstream = (get OutputStream somehow)
Writer wout = new OutputStreamWriter(out);
Run Code Online (Sandbox Code Playgroud)
ok2*_*k2c 27
我知道另一个答案已被接受,只是为了记录这是如何用HttpClient写出内容而不在内存中进行中间缓冲.
AbstractHttpEntity entity = new AbstractHttpEntity() {
public boolean isRepeatable() {
return false;
}
public long getContentLength() {
return -1;
}
public boolean isStreaming() {
return false;
}
public InputStream getContent() throws IOException {
// Should be implemented as well but is irrelevant for this case
throw new UnsupportedOperationException();
}
public void writeTo(final OutputStream outstream) throws IOException {
Writer writer = new OutputStreamWriter(outstream, "UTF-8");
writeXml(writer);
writer.flush();
}
};
HttpPost request = new HttpPost(uri);
request.setEntity(entity);
Run Code Online (Sandbox Code Playgroud)
Ale*_*lex 14
您无法直接从BasicHttpClient获取OutputStream.您必须创建一个HttpUriRequest对象并为其提供一个HttpEntity封装您要发送的内容的对象.例如,如果输出小到足以适合内存,则可能会执行以下操作:
// Produce the output
ByteArrayOutputStream out = new ByteArrayOutputStream();
Writer writer = new OutputStreamWriter(out, "UTF-8");
writeXml(writer);
// Create the request
HttpPost request = new HttpPost(uri);
request.setEntity(new ByteArrayEntity(out.toByteArray()));
// Send the request
DefaultHttpClient client = new DefaultHttpClient();
HttpResponse response = client.execute(request);
Run Code Online (Sandbox Code Playgroud)
如果数据足够大以至于需要对其进行流式传输,则会变得更加困难,因为没有HttpEntity接受OutputStream的实现.您需要写入临时文件并使用FileEntity或可能设置管道并使用InputStreamEntity
编辑请参阅oleg的答案,了解演示如何流式传输内容的示例代码 - 毕竟,您不需要临时文件或管道.
| 归档时间: |
|
| 查看次数: |
23626 次 |
| 最近记录: |