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();

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。