StringEntity类是Apache HttpClient 库中的一个类,它用于将字符串内容作为 HTTP 请求实体(请求体)。这个类非常适合用于发送 JSON、XML 或其他需要以字符串形式发送的数据。以下是 StringEntity 类的一些常用方法和代码案例:
常用方法
-
构造方法:
StringEntity(String string)
:创建一个默认内容类型为text/plain
的StringEntity
。StringEntity(String string, Charset charset)
:创建一个指定字符编码的StringEntity
。StringEntity(String string, ContentType contentType)
:创建一个指定内容类型的StringEntity
。StringEntity(String string, String charset)
:创建一个指定字符编码的StringEntity
(已过时,建议使用Charset
版本)。
-
setContentEncoding(String contentEncoding):设置实体的内容编码。
-
setContentType(String contentType):设置实体的内容类型。
-
getContent():返回实体的内容流。
-
getContentLength():返回实体内容的长度,如果未知则返回负数。
-
isRepeatable():返回实体是否可以重复使用。
-
writeTo(OutputStream outstream):将实体内容写入到输出流中。
代码案例
案例 1 :使用 StringEntity 发送 JSON 数据。
java
import org.apache.http.entity.StringEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpPost httpPost = new HttpPost("http://example.com/api");
String json = "{\"key\":\"value\"}";
StringEntity entity = new StringEntity(json, "UTF-8");
entity.setContentType("application/json");
httpPost.setEntity(entity);
CloseableHttpResponse response = httpClient.execute(httpPost);
try {
String responseBody = EntityUtils.toString(response.getEntity(), "UTF-8");
System.out.println(responseBody);
} finally {
response.close();
httpClient.close();
}
在这个例子中,我们创建了一个 HttpPost
对象,并使用 StringEntity
设置了请求体为 JSON 格式的数据。我们还设置了内容类型为 application/json
并发送了请求。响应内容被转换成字符串并打印出来。
案例 2 :使用 StringEntity 发送表单数据。
java
import org.apache.http.entity.StringEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicHeader;
import org.apache.http.util.EntityUtils;
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpPost httpPost = new HttpPost("http://example.com/api");
String form = "field1=value1&field2=value2";
StringEntity entity = new StringEntity(form, "UTF-8");
entity.setContentType(new BasicHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"));
httpPost.setEntity(entity);
CloseableHttpResponse response = httpClient.execute(httpPost);
try {
String responseBody = EntityUtils.toString(response.getEntity(), "UTF-8");
System.out.println(responseBody);
} finally {
response.close();
httpClient.close();
}
在这个例子中,我们创建了一个 HttpPost
对象,并使用 StringEntity
设置了请求体为表单数据。我们还设置了内容类型为 application/x-www-form-urlencoded
并发送了请求。响应内容被转换成字符串并打印出来。
这些案例展示了如何使用 StringEntity
类来发送不同类型的数据。在实际应用中,你可以根据需要选择适当的构造方法和设置方法来满足你的要求。