HttpClient(4.3.5) - HTTP Entity
根据实体的起源,HttpClient 将实体分为三类:
streamed - 实体内容是从流接收或者再运行中产生的。特别地,这类实体包括从 HTTP 响应接收的。streamed 实体通常是不可重复读取的。
self-contained - 实体内容是存在于内存或者是通过独立的连接或其他实体获得的。self-contained 实体是可重复读取的。这类实体经常用于实体封装的 HTTP 请求。
wrapping - 实体内容是从其他实体获得的。
当从 HTTP 响应中获取流式内容时,这个区别对于连接管理是很重要的。对于由应用程序创建的而且只使用 HttpClient 发送的请求实体,streamed 实体和 self-contained 实体的差异就不那么重要了。这种情况,建议将不可重复读取的认为是 streamed 实体,可重复读取的认为是 self-contained 实体。
常用的 HttpEntity
StringEntity
HttpEntity entity = new StringEntity("important message", ContentType.create("text/plain", "UTF-8")); HttpPost httppost = new HttpPost("http://www.example.com/"); httppost.setEntity(entity);
UrlEncodedFormEntity
List<NameValuePair> formparams = new ArrayList<NameValuePair>(); formparams.add(new BasicNameValuePair("param1", "value1")); formparams.add(new BasicNameValuePair("param2", "value2")); HttpEntity entity = new UrlEncodedFormEntity(formparams, Consts.UTF_8);
FileEntity
File file = new File("hello.txt");
HttpEntity entity = new FileEntity(file,
ContentType.create("text/plain", "UTF-8"));
ByteArrayEntity
HttpEntity entity = new ByteArrayEntity("important message".getBytes());
ByteArrayInputStream
InputStream ins = new ByteArrayInputStream("important message".getBytes());
SerializableEntity
HttpEntity entity = new SerializableEntity("important message");
EntityBuilder
可以通过 EntityBuilder 创建 HttpEntity 实例,EntityBuilder 有几个用于设置实体内容的 setter 方法,这几个 setter 方法是互斥的,如果多次调用这些方法,只有最后一次调用会起作用。
setText(String)
setBinary(byte[])
setStream(java.io.InputStream)
setSerializable(java.io.Serializable)
setParameters(java.util.List<NameValuePair>)
setParameters(org.apache.http.NameValuePair...)
setFile(java.io.File)
使用 EntityBuilder
HttpEntity entity = EntityBuilder.create() .setText("important message") .setContentType(ContentType.create("text/plain", "UTF-8")) .build();
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。