java利用org.apache.http.client.HttpClient发送3种post请求(参数为json、参数为键值对、参数为文件)

论坛 期权论坛 编程之家     
选择匿名的用户   2021-5-29 00:04   16   0
//超时时间
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;
}

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP