httpclient流转发乱码解决

httpclient流转发乱码解决


MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
builder.setCharset(Charset.forName(“utf-8”));//设置请求的编码格式
builder.addBinaryBody(“file”, file.getInputStream(), ContentType.MULTIPART_FORM_DATA, fileName);// 文件流
//乱码的解决
StringBody parent_dir = new StringBody(map.get(“parent_dir”), Charset.forName(“utf-8”));
builder.addPart(“parent_dir”, parent_dir);
StringBody filename = new StringBody(fileName, Charset.forName(“utf-8”));
builder.addPart(“filename”, parent_dir);

package com.weixin.utils;


import com.ruoyi.framework.web.domain.server.Sys;
import org.apache.http.client.methods.HttpDelete;
import org.apache.http.client.methods.HttpPut;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.content.StringBody;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.springframework.web.multipart.MultipartFile;

import java.io.*;
import java.nio.charset.Charset;
import java.util.*;
import java.util.Map;
import java.util.concurrent.CountDownLatch;

@Component
public class HttpClientUtils {

    private static String url;

    @Value("${seafile.url}")
    public void setUrl(String url) {
        this.url = url;
    }

    //构造http的put请求
    public static String sendPost(String url, Map<String, String> headmap, Map<String, String> dataMap) {
        // 第三方服务器请求地址
        CloseableHttpClient httpClient = HttpClients.createDefault();
        String result = "";
        try {

            HttpPost httpPost = new HttpPost(url);
            Set set = headmap.keySet();
            Iterator<String> iterator = set.iterator();
            while (iterator.hasNext()) {
                String key = iterator.next();
                httpPost.setHeader(key, headmap.get(key));
            }
            MultipartEntityBuilder builder = MultipartEntityBuilder.create();
            if (dataMap != null) {
                Set dataset = dataMap.keySet();
                iterator = dataset.iterator();
                while (iterator.hasNext()) {
                    String key = iterator.next();
                    String value = String.valueOf(dataMap.get(key));
                    builder.addTextBody(key, value);// 类似浏览器表单提交,对应input的name和value
                }
            }
            HttpEntity entity = builder.build();
            httpPost.setEntity(entity);
            HttpResponse response = httpClient.execute(httpPost);// 执行提交
            HttpEntity responseEntity = response.getEntity();

            if (responseEntity != null) {
                // 将响应内容转换为字符串
                result = EntityUtils.toString(responseEntity, Charset.forName("UTF-8"));
            }
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                httpClient.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return result;
    }

    //构造httpclient的get请求
    public static String sendGet(String url, Map<String, String> headmap, Map<String, String> dataMap) {
        // 第三方服务器请求地址
        CloseableHttpClient httpClient = HttpClients.createDefault();
        String result = "";
        try {
            HttpGet httpPost = new HttpGet(url);
            Set set = headmap.keySet();
            Iterator<String> iterator = set.iterator();
            while (iterator.hasNext()) {
                String key = iterator.next();
                httpPost.setHeader(key, headmap.get(key));
            }
            HttpResponse response = httpClient.execute(httpPost);// 执行提交
            HttpEntity responseEntity = response.getEntity();

            if (responseEntity != null) {
                // 将响应内容转换为字符串
                result = EntityUtils.toString(responseEntity, Charset.forName("UTF-8"));
            }
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                httpClient.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return result;
    }

    //将流转发到文件服务器
    public static String httpClientUploadFile(MultipartFile file, Map<String, String> map) {
        // 第三方服务器请求地址
        CloseableHttpClient httpClient = HttpClients.createDefault();
        String result = "";
        try {
            String fileName = file.getOriginalFilename();
            //构建文件的上传地址
            String url = map.get("url").replace("\"", "").replaceAll("\\s+", "");
            HttpPost httpPost = new HttpPost(url);
            httpPost.setHeader("Authorization", map.get("Authorization"));
            MultipartEntityBuilder builder = MultipartEntityBuilder.create();
            builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
            builder.setCharset(Charset.forName("utf-8"));//设置请求的编码格式
            builder.addBinaryBody("file", file.getInputStream(), ContentType.MULTIPART_FORM_DATA, fileName);// 文件流
            //乱码的解决
            StringBody parent_dir = new StringBody(map.get("parent_dir"), Charset.forName("utf-8"));
            builder.addPart("parent_dir", parent_dir);
            StringBody filename = new StringBody(fileName, Charset.forName("utf-8"));
            builder.addPart("filename", parent_dir);
//            builder.addTextBody("filename", fileName); // 类似浏览器表单提交,对应input的name和value
//            builder.addTextBody("parent_dir", map.get("parent_dir"));
//            System.out.println(map.get("parent_dir"));
            HttpEntity entity = builder.build();
            httpPost.setEntity(entity);
            HttpResponse response = httpClient.execute(httpPost);// 执行提交
            HttpEntity responseEntity = response.getEntity();

            if (responseEntity != null) {
                // 将响应内容转换为字符串
                result = EntityUtils.toString(responseEntity, Charset.forName("UTF-8"));
            }
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                httpClient.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return result;
    }

    //编写delete的httpclient的命令
    public static String HttpClientDetele(String url, Map<String, String> headmap) {
        CloseableHttpClient httpClient = HttpClients.createDefault();
        String res = "";
        try {
            HttpDelete httpDelete = new HttpDelete(url);
            if (headmap != null) {
                Set set = headmap.keySet();
                Iterator<String> iterator = set.iterator();
                while (iterator.hasNext()) {
                    String key = iterator.next();
                    httpDelete.setHeader(key, headmap.get(key));
                }
            }
            MultipartEntityBuilder builder = MultipartEntityBuilder.create();
            builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
            builder.setCharset(Charset.forName("utf-8"));//设置请求的编码格式
            HttpResponse response = httpClient.execute(httpDelete);// 执行提交
            HttpEntity responseEntity = response.getEntity();

            if (responseEntity != null) {
                // 将响应内容转换为字符串
                res = EntityUtils.toString(responseEntity, Charset.forName("UTF-8"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                httpClient.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return res;
    }

    //用户分享的专用的http请求
    public static String sharelibusers(String aaurl, Map<String, String> headmap, String[] usernames) {
        // 第三方服务器请求地址
        CloseableHttpClient httpClient = HttpClients.createDefault();
        String result = "";
        try {
            //添加用户的请求
            String param="";
            for (String username : usernames) {
                param=param+username+",";
            }
            aaurl=aaurl+param;
            System.out.println(aaurl);
            HttpPut httpPost = new HttpPut(aaurl);
            Set set = headmap.keySet();
            Iterator<String> iterator = set.iterator();
            while (iterator.hasNext()) {
                String key = iterator.next();
                httpPost.setHeader(key, headmap.get(key));
            }
            MultipartEntityBuilder builder = MultipartEntityBuilder.create();
            HttpEntity entity = builder.build();
            httpPost.setEntity(entity);
            HttpResponse response = httpClient.execute(httpPost);// 执行提交
            HttpEntity responseEntity = response.getEntity();

            if (responseEntity != null) {
                // 将响应内容转换为字符串
                result = EntityUtils.toString(responseEntity, Charset.forName("UTF-8"));
            }
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                httpClient.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return result;
    }

    public static void main(String[] args) throws IOException, InterruptedException {
        Map<String, String> map = new HashMap<>();
        map.put("Authorization", "Token " + "b2b25fd71528da0ee3023c1362d5bc92bb101ae5");
        String aaurl = HttpUtils.scanUrl(("http://127.0.0.1:8000" + "/api2/shared-repos/" + "fb92725b-ddcc-4b8e-9fa1-ec4465af4566/?" + "share_type=personal&permission=r&users="));
//        for(int i=0;i<100;i+=10){
//            Thread thread=new ShareThread(aaurl,i,10);
//            thread.start();
//        }
        List<String> list=new ArrayList<>();
        for(int i=0;i<120;i++){
            list.add(i+"@ruijie.com.cn");
        }
        String[] usernames=list.toArray(new String[list.size()]);
        String res=HttpClientUtils.sharelibusers(aaurl,map,usernames);
        System.out.println(res);

    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值