HttpClient只能以编程的方式通过其API用于传输和接受HTTP消息
参考地址:https://blog.csdn.net/justry_deng/article/details/81042379
通过如下3步来访问HTTP资源
1.创建HttpGet或HttpPost对象,将要请求的URL通过构造方法传入HttpGet或HttpPost对象。
2.使用DefaultHttpClient类的execute方法发送HTTP GET或HTTP POST请求,并返回HttpResponse对象。
3.通过HttpResponse接口的getEntity方法返回响应信息,并进行相应的处理。
get ,第一种添加带参数请求方式
//第(1)种添加参数的形式
uriBuilder.addParameter("RECORD_ID", "322019112600000358");
//** 第(2)种添加参数的形式 *//*
/*List<NameValuePair> list = new LinkedList<>();
BasicNameValuePair param1 = new BasicNameValuePair("RECORD_ID", "322019112900000365");
list.add(param1);
HttpRequestUtils.httpGet_Params("http://198.10.1.49:8081/WinterSpring/monitorarea/api/get_warn_picture_info",list);*/
@SuppressWarnings("unused")
private static void httpGet_Params(String url, List<NameValuePair> list) {
URIBuilder uriBuilder;
// 获取连接客户端工具
CloseableHttpClient httpClient = HttpClients.createDefault();
String entityStr = null;
CloseableHttpResponse response = null;
try {
uriBuilder = new URIBuilder(url);
uriBuilder.setParameters(list);
// 根据带参数的URI对象构建GET请求对象
HttpGet httpGet = new HttpGet(uriBuilder.build());
//传输的类型
httpGet.addHeader("Content-Type","application/json;charset=UTF8");
/*//浏览器表示
httpGet.addHeader("User-Agent","Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)");*/
//执行请求
response = httpClient.execute(httpGet);
// 获得响应的实体对象
HttpEntity entity = response.getEntity();
entityStr = EntityUtils.toString(entity, "UTF-8");
System.out.println(entityStr.toString());
} catch (URISyntaxException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
// 释放连接
if (null != response) {
try {
response.close();
httpClient.close();
} catch (IOException e) {
System.err.println("释放连接出错");
e.printStackTrace();
}
}
}
}
get,第二种添加带参数请求方式
/*Map<String,String> mps= new HashMap<String,String>();
mps.put("CAMERA_IP", "192.10.1.141");
mps.put("CAPTURE_DATETIME", "1899/12/30 22:00:00");
mps.put("TRIGGERED_MODEL_ID", "11");
mps.put("RECOG_BODY_NUM", "3");
//GetImageStr对图片做base64编码处理
//String sss = GetImageStr("C:\\Users\\Administrator\\Desktop\\1023\\LinkedList继承图谱.png");
//mps.put("PICTURE",sss);
//get请求URL拼接参数
String url = getAppendUrl("http://198.10.1.49:8081/WinterSpring/monitorarea/api/getPictureInfo",mps);
HttpRequestUtils.httpGet(url);*/
/**
* @Description get请求URL拼接参数
* @param url
* 接口地址(无参数)
* @param map
* 拼接参数集合
*/
@SuppressWarnings("deprecation")
public static String getAppendUrl(String url, Map<String, String> map) {
if (map != null && !map.isEmpty()) {
StringBuffer buffer = new StringBuffer();
Iterator<Entry<String, String>> iterator = map.entrySet().iterator();
while (iterator.hasNext()) {
Entry<String, String> entry = iterator.next();
//对参数转义
String entry_value = URLEncoder.encode(entry.getValue());
if (StringUtils.isEmpty(buffer.toString())) {
buffer.append("?");
} else {
buffer.append("&");
}
buffer.append(entry.getKey()).append("=").append(entry_value);
}
url += buffer.toString();
}
return url;
}
public static void httpGet(String url){
try {
HttpClient client = HttpClientBuilder.create().build();
//发送get请求
//第1步:创建HttpGet对象
HttpGet request = new HttpGet(url);
//第2步:使用execute方法发送HTTP GET请求,并返回HttpResponse对象
HttpResponse response = client.execute(request);
/**请求发送成功,并得到响应**/
//判断请求响应状态码,状态码为200表示服务端成功响应了客户端的请求
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
/**读取服务器返回过来的json字符串数据**/
//第3步:使用getEntity方法获得返回结果
String strResult = EntityUtils.toString(response.getEntity());
/**把json字符串转换成java对象**/
//JSONObject ss= JSON.parseObject(strResult);
@SuppressWarnings("unchecked")
List<JSONObject> list2 = JSON.parseObject(strResult, List.class);
Iterator<JSONObject> re= list2.iterator();
while(re.hasNext()) {
JSONObject reco = re.next();
System.out.println(reco.toString());
}
url = URLDecoder.decode(url, "UTF-8");
} else {
logger.error("get请求提交失败:" + url);
}
} catch (IOException e) {
logger.error("get请求提交失败:" + url, e);
}
}
post请求,带参(可以传相同key值,不同value值,接收时对value值当作数组来接收)
HttpRequestUtils.httpPosts("http://198.10.1.49:8081/WinterSpring/wevue/api/getPictureInfo");
public static String httpPosts(String url){ //, Map<String,String> params
//public static void httpPost(String url, Map<String,String> params){
Map<String,String> mps= new HashMap<String,String>();
mps.put("CAMERA_IP", "192.10.1.141");
mps.put("CAPTURE_DATETIME", "2019-11-6 22:00:00");
mps.put("TRIGGERED_MODEL_ID", "8");
mps.put("TRIGGER_REASON", "天下");
String sss = GetImageStr("C:\\Users\\Administrator\\Desktop\\1023\\IMG_20191203_105834.jpg");
mps.put("PICTURE", sss);
String rs = httpPost(url, mps);
System.out.println("获取token返回结果=" + rs);
return rs;
}
public static String httpPost(String url, Map<String, String> params){
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpPost httpPost = new HttpPost(url); //建立HttpPost对象
CloseableHttpResponse response = null;
String result = null;
try {
//建立一个NameValuePair数组,用于存储欲传送的参数
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
if (null != params && params.size() > 0) {
for (Map.Entry<String, String> entry : params.entrySet()) {
String key = entry.getKey();
String value = entry.getValue();
if (key == null || value == null) {
continue;
}
if("PICTURE".equals(key)) {
//System.out.println("PICTURE:"+key);prc3200000010.png
//System.out.println(value);
String ssssss = GetImageStr("C:\\Users\\Administrator\\Desktop\\1023\\IMG_20191203_105834.jpg");
NameValuePair pairr = new BasicNameValuePair(key, ssssss);
nameValuePairs.add(pairr);//添加参
}
NameValuePair pair = new BasicNameValuePair(key, value);
nameValuePairs.add(pair);//添加参数
}
}
//设置编码,解决中文乱码问题
httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs,"UTF-8"));
httpPost.setHeader("Content-type", "application/json");
//httpPost.setHeader("Content-type", "application/x-www-form-urlencoded");
//httpPost.setHeader("Content-type", "multipart/form-data");
//发送Post,并返回一个HttpResponse对象
response = httpClient.execute(httpPost);
HttpEntity entity = response.getEntity();
if (null != entity) {
result = EntityUtils.toString(entity, ContentType.getOrDefault(entity).getCharset());
System.out.println("执行请求完毕:" + result);
EntityUtils.consume(entity);
}
} catch (IOException e) {
System.out.println(e.getMessage());
} finally {
try {
if (response != null) {
response.close();
}
} catch (IOException e) {
System.out.printf("请求通信[\" + reqURL + \"]时网络时,关闭异常,堆栈轨迹如下", e);
}
httpPost.releaseConnection();
}
return result;
}