//超时时间
private static final int ConnectionRequestTimeout = 5000;//从连接池中获取连接的超时时间
private static final int ConnectTimeout = 60000;//与服务器连接超时时间:httpclient会创建一个异步线程用以创建socket连接,此处设置该socket的连接超时时间
private static final int SocketTimeout = 60000;//socket读数据超时时间:从服务器获取响应数据的超时时间
private static final RequestConfig requestConfig = RequestConfig.custom().setConnectionRequestTimeout(ConnectionRequestTimeout).setConnectTimeout(ConnectTimeout).setSocketTimeout(SocketTimeout).build();
//发送post请求,参数为键值对
public static Map<String, Object> sendPost(String url, String[] name, String[] value, String[] herderName, String[] headerValue) throws IOException {
// 获取默认的请求客户端,CloseableHttpClient是HttpClient的实例
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpPost httpPost = new HttpPost(url);
// 设置超时
httpPost.setConfig(requestConfig);
//添加herder信息
for (int i = 0; i < herderName.length; i++) {
httpPost.addHeader(herderName[i], headerValue[i]);
}
//添加传参
List<NameValuePair> list = new ArrayList<>();
for (int i = 0; i < name.length; i++) {
BasicNameValuePair basicNameValuePair = new BasicNameValuePair(name[i].trim(), value[i].trim());//trim():去掉字符串首尾的空格
list.add(basicNameValuePair);
}
httpPost.setEntity(new UrlEncodedFormEntity(list));
LocalTime startTime = LocalTime.now();//响应开始时间
CloseableHttpResponse response = httpClient.execute(httpPost);
LocalTime endTime = LocalTime.now();//响应结束时间
int code = response.getStatusLine().getStatusCode();
if (code != 200) {
System.out.println(url + response);
}
Map<String, Object> map_re = new HashMap<>();
map_re.put("code", code);
map_re.put("entity", EntityUtils.toString(response.getEntity(), "UTF-8"));
map_re.put("responseTime", Duration.between(startTime, endTime).toMillis());
response.close();
httpClient.close();
return map_re;
}
//发送post请求,参数为json格式
public static Map<String, Object> sendPostJson(String url, String jsonMag, String[] herderName, String[] headerValue) throws IOException {
HttpClient httpclient = HttpClients.createDefault();
HttpPost httpPost = new HttpPost(url);
//添加header信息
httpPost.addHeader("Content-Type", "application/json");//设置httpPost的请求头中的MIME类型为json
for (int i = 0; i < herderName.length; i++) {
httpPost.addHeader(herderName[i], headerValue[i]);
}
// 设置超时
httpPost.setConfig(requestConfig);
//设置请求参数
StringEntity se = new StringEntity(jsonMag, "utf-8");//使用json格式来设置body使用StringEntity类
httpPost.setEntity(se);
LocalTime startTime = LocalTime.now();//响应开始时间
HttpResponse response = httpclient.execute(httpPost);//访问接口,并且获取返回值
LocalTime endTime = LocalTime.now();//响应结束时间
int code = response.getStatusLine().getStatusCode();
if (code != 200) {
System.out.println(url + response);
}
Map<String, Object> codeAndEntity = new HashMap<>();
codeAndEntity.put("code", code);
codeAndEntity.put("entity", EntityUtils.toString(response.getEntity(), "UTF-8"));
codeAndEntity.put("responseTime", Duration.between(startTime, endTime).toMillis());
return codeAndEntity;
}
//发送post请求,上传文件
//String fileName:文件参数名, String filePath:文件路径, String fileType:文件类型
public static Map<String, Object> sendPostFile(String url, String[] name, String[] value, String[] herderName, String[] headerValue, String fileName, String filePath, String fileType) throws IOException {
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpPost httpPost = new HttpPost(url);
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
// 设置超时
httpPost.setConfig(requestConfig);
//添加herder信息
for (int i = 0; i < herderName.length; i++) {
httpPost.addHeader(herderName[i], headerValue[i]);
}
//添加传参
for (int i = 0; i < name.length; i++) {
builder.addTextBody(name[i], value[i], ContentType.TEXT_PLAIN);
}
//添加文件
File f = new File(filePath);
builder.addBinaryBody(fileName, new FileInputStream(f), ContentType.getByMimeType(fileType), f.getName());
HttpEntity multipart = builder.build();
httpPost.setEntity(multipart);
LocalTime startTime = LocalTime.now();//响应开始时间
CloseableHttpResponse response = httpClient.execute(httpPost);
LocalTime endTime = LocalTime.now();//响应结束时间
int code = response.getStatusLine().getStatusCode();
if (code != 200) {
System.out.println(url + response);
}
Map<String, Object> codeAndEntity = new HashMap<>();
codeAndEntity.put("code", code);
codeAndEntity.put("entity", EntityUtils.toString(response.getEntity(), "UTF-8"));
codeAndEntity.put("responseTime", Duration.between(startTime, endTime).toMillis());
response.close();
httpClient.close();
return codeAndEntity;
}
|