在java开发中,总是有些机会会调用到别人接口,这个时候你就要选择,是选择使用JDK下的HttpUrlConnection还是选择httpclient
至于具体的区别我在这里提一下:
HttpUrlConnection :用于第三方请求,一些简单的请求传入参数少的情况下,httpurlconnection没问题;
httpclient:urlconnection做的事httpclient都能做,只是在登陆请求或者权限验证时,到时候就会涉及到session和cookie的处理,这个时候用urlconnection就会比较麻烦,简而言之,httpclient是urlconnection的升级版
StringEntity和UrlEncodedFormEntity的区别
既然选择用到了httpclient,那么在httppost时就要传入entity参数体,在以前的版本下只能使用urlEncodedformEntity的参数体
如下:
HttpPost post = new HttpPost();
// 你要传入的参数
Map<String, String> params = new HashMap<>();
// urlEncodedForm的参数要给入NameValuePair类型的参数
List<NameValuePair> nvps = new ArrayList<>();
for (String key : params.keySet()) {
nvps.add(new BasicNameValuePair(key, params.get(key)));
}
post.setEntity(new UrlEncodedFormEntity(nvps,"UTF-8"));
这时在请求时参数会自动变为key1=value1&key2=value2
httppost的请求头里的contentType也会自动变为application/x-www-form-urlencoded
这里就是我们通常所说的在请求中会有两种常用的请求,注意我没有把所有的请求列出来,一个是键值对类型,一个是json参数
在这里那么自然就是键值对类型了
那么这就是UrlEncodedFormEntity的限制。
在今后的开发中我们难免会碰到不一样的请求,有的请求不允许你使用键值对类型,那么此时作为urlEncodedFormEntity的升级版StringEntity出现了。
代码如下:
HttpPost post = new HttpPost();
// 你要传入的json参数
String json = "";
StringEntity entity = new StringEntity(json,"UTF-8");
// 当然这里也可以使用application/x-www.form-urlencoded类型
entity.setContentType("application/json");
entity.setContentEncoding("UTF-8");
post.setEntity(entity);
不会像urlEncodedFormEntity那么死板,StringEntity既能够灵活的选择键值对类型或者json请求体类型,只要参数与contentType的类型对应,那么可以起飞辣~~