HttpPut、HttpGet、HttpPost【请求方式:根据接收端指定的请求方法确定】
org.apache.httpcomponents
httpclient
4.5.2
1、无参数
CloseableHttpClient httpClient = HttpsClient.createDefault();
HttpGet httpGet = new HttpGet(url);//请求方式根据请求的接口确认
//设置超时时间 - time1:连接服务器的时间 、time2:请求的时间、time3:读取数据的时间
RequestConfig config =
RequestConfig.custom().setConnectTimeout(time1).setConnectionRequestTimeout(time2).setSocketTimeout(time3).build();
httpGet.setConfig(config );
CloseableHttpResponse response = httpClient.excute(httpGet);//发送请求
int statusCode = response.getStatusLine().getStatusCode();//返回状态码 : 200-成功。。。
if(statusCode != HttpStatus.SC.OK){ //判断是否请求成功
System.out.println("请求失败 ,原因 : " +response.getStatusLine());
throw new Exception("请求失败! 原因 : " +response.getStatusLine());
}
HttpEntity httpEntity = response.getEntity();//获取返回的数据
String result = EntityUtils.toString(httpEntity);
//之后将result 转换成 JSONObject 获取数据
JSONObject jo = new JSONObject(JSON.parseObject(result));
这个过程会抛出异常,同时需要 关闭资源: EntityUtils.consume(httpEntity)、httpClient.close()、response.close()
2、参数是字符串【暂时分为2种】
httpGet.addHeader("Content-Type","application/json ; charset= utf-8"); //请求中参数的格式,都需要的
a、放在Header中
在发送请求之前的代码中,加入以下代码:
HttpGet.addHeader("key1","value1");
b、放在body中【json】
Map
map.put("key",value);
StringEntity entity = new StringEntity(JSON.toJSONString(map))
entity.setContentEncoding("UTF-8");
entity.setContentType("application/json");
httpGet.setEntity(entity);
3、参数是 文件类型【视频、图片等】--上传文件
在发送请求之前加入以下代码:
HttpEntity httpEntity = new InputStreamEntity(new FileInputStream(new File("D:\\1.txt")));
httpPut.setEntity(httpEntity );
1、我遇到的场景是 : 先从一个远程服务器上下载文件,再存到另外一个远程服务器上
HttpEntity httpEntity1= new InputStreamEntity(httpEntity.getContent);//httpEntity 是请求第一个服务器下载下来的
在获取下载的数据的方法结尾关闭了流 【EntityUtils.consume(entity1 )】,导致在执行上面那个代码时报错