HttpClient以multipart/form-data上传文件

 

1.抓包请求:

2.代码实现

public static String doPostUpload(String url, Map<String, ContentBody> mapParam, String headers) {
 
    // 创建请求连接,添加Cookie
    CloseableHttpClient closeableHttpClient = null;
    CookieStore cookieStore = new BasicCookieStore();
    BasicClientCookie cookie = new BasicClientCookie( "JSESSIONID", JSESSIONID );
    cookie.setVersion( Version );
    cookie.setDomain( Domain );
    cookie.setPath( Path );
    cookieStore.addCookie( cookie );
 
    closeableHttpClient = HttpClients.custom()
            .setProxy( proxy )
            .setRedirectStrategy( new LaxRedirectStrategy() ) //自动跟随重定向
            .setConnectionTimeToLive( 6000, TimeUnit.MILLISECONDS )
            .setDefaultCookieStore( cookieStore )
            .build();
 
    HttpPost httpPost = new HttpPost( url );
    System.out.println( "请求地址 " + httpPost.getURI() );
 
    //setConnectTimeout:设置连接超时时间,单位毫秒。
    // setConnectionRequestTimeout:设置从connect Manager获取Connection 超时时间,单位毫秒。这个属性是新加的属性,因为目前版本是可以共享连接池的。
    // setSocketTimeout:请求获取数据的超时时间,单位毫秒。 如果访问一个接口,多少时间内无法返回数据,就直接放弃此次调用。
    RequestConfig defaultRequestConfig = RequestConfig.custom().
            setConnectTimeout( 5000 )
            .setConnectionRequestTimeout( 5000 )
            .setSocketTimeout( 15000 )
            .build();
    httpPost.setConfig( defaultRequestConfig );
 
    MultipartEntityBuilder multipartEntityBuilder = MultipartEntityBuilder.create();
 
    for (Map.Entry<String, ContentBody> param : mapParam.entrySet()) {
        multipartEntityBuilder.addPart( param.getKey(), param.getValue() );
    }
    //multipartEntityBuilder.setCharset( Charset.forName( "utf-8" ));
    multipartEntityBuilder.setMode( HttpMultipartMode.BROWSER_COMPATIBLE ); //加上此行代码解决返回中文乱码问题
 
    HttpEntity reqEntity = multipartEntityBuilder.build();
    httpPost.setEntity( reqEntity );
 
    // 处理头部信息
    if (!CommonMethord.isEmpty( headers )) {
        String[] header_array = headers.split( ";" );
        for (String line : header_array) {
            String[] header = line.split( "=" );
            httpPost.addHeader( header[0], header[1] );
        }
    }
    // 获取返回对象
    String result = ""; //
    CloseableHttpResponse resp = null; //返回结果
 
    try {
        // 发送请求
        resp = closeableHttpClient.execute( httpPost );
 
        // http 状态 200 404 302 500
        StatusLine line = resp.getStatusLine();
        System.out.println( "返回响应码: " + line );
 
        // 结果
        HttpEntity httpEntity = resp.getEntity();
        if (httpEntity != null) {
            result = EntityUtils.toString( httpEntity, Charset.forName( "UTF-8" ) );
            System.out.println( "返回结果: " + result );
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            // 关闭连接
            closeableHttpClient.close();
 
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    return result;

3.测试代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值