HttpClient 入门
尽管 java.net 包提供了基础的功能,可以通过 HTTP 协议来访问网络资源,但它没有提供许多应用需要的灵活性或功能性。
HttpClient 通过高效,即时,并且富有特色的包填补 java.net
这一空缺,实现了 HTTP 绝大部分的标准和建议的客户端。
用于扩展,并为基础 HTTP 协议提供鲁棒性支持的 HttpClient 将受到那些构建 HTTP 客户端应用的用户青睐,
例如 web 浏览器,网络服务客户端,或者是运用或扩展 HTTP 协议用于分布式会议。
HttpClient 不是什么
HttpClient 不是浏览器,它是客户端的 HTTP 传输库。它的目的在于发送、接受 HTTP 信息。如果没有明确设置,或者重新格式化请求 / 重写定位 URI, 或其它不涉及 HTTP 传输的功能,HttpClient 不会去解析内容,运行嵌入在 HTML 页面的 javascript 代码,获取内容类型(content type)。
简单入门
public static void main(String[] args) throws IOException, URISyntaxException
{
CloseableHttpClient client = HttpClients.createDefault();
// 请求地址
String uri = "http://localhost:8002/test"
HttpGet httpGet = new HttpGet(uri);
CloseableHttpResponse response = client.execute(httpGet);
try
{
System.out.println("消息协议:" + response.getProtocolVersion());
System.out.println("返回状态码:" + response.getStatusLine().getStatusCode());
System.out.println("返回短句:" + response.getStatusLine().getReasonPhrase());
} finally
{
response.close();
}
}
第二种:将String 变成URI对象进行封装请求地址
// 用这种方式拼接,也可以直接写字符串
URI uri = new URIBuilder().setScheme("http").setHost("localhost").setPort(8002)
.setPath("test")
.build();
HttpGet httpGet = new HttpGet(uri);
读取response返回信息
/**
* 返回json串
* {
* code:
* msg:
* result:
* }
*/
CloseableHttpResponse response = httpclient.execute(httpPost);
try
{
String respStr = null;
HttpEntity entity = response.getEntity();
if(entity != null) {
respStr = EntityUtils.toString(entity, "UTF-8");
}
JSONObject message = JSONObject.parseObject(respStr);
logger.info("msg : " + message.get("msg"));
status = message.get("result") == "true" ? true : false;
// 释放资源
EntityUtils.consume(entity);
} finally
{
response.close();
}
HTML 参数设置
URI 方式
// 用这种方式拼接,也可以直接写字符串
URI uri = new URIBuilder().setScheme("http").setHost("localhost").setPort(8002)
.setPath("test")
// 设置setParameter
.setParameter("s", "小菜鸡")
.build();
HttpGet httpGet = new HttpGet(uri);
UrlEncodedFormEntity 实体类来帮助处理
CloseableHttpClient client = HttpClients.createDefault();
HttpPost httpPost = new HttpPost("http://localhost:8002/test");
ArrayList<NameValuePair> list = new ArrayList<>();
list.add(new BasicNameValuePair("s", "垃圾"));
UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(list, Consts.UTF_8);
httpPost.setEntity(formEntity);
CloseableHttpResponse response = client.execute(httpPost);