org.apache.http.client.ClientProtocolException: null java.io.IOException: Attempted read from close

在写HTTPClient请求的时候,明明请求成功了,但是不知道为什么报错


    /**
     *
     * @param file  文件
     * @param url    请求到哪里url  http://127.0.0.1:8080/upload
     * @param target  上传到哪里  e:/test/
     * @return
     * @throws IOException
     */
    @PostMapping("/test")
    @ResponseBody
    private String gettesthttpclient1(MultipartFile file,String url,String target) throws IOException {
        CloseableHttpClient httpclient = HttpClients.createDefault();
        RequestConfig requestConfig = RequestConfig.custom()
                .setConnectionRequestTimeout(10000)
                .setConnectTimeout(5000)
                .build();
        HttpPost httpPost = new HttpPost(url);
        MultipartEntityBuilder entityBuilder = MultipartEntityBuilder.create();
        // 解决中文文件名乱码问题
        entityBuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
        entityBuilder.setCharset(Consts.UTF_8);
        InputStream inputStream = file.getInputStream();
        //设置文件
        entityBuilder.addBinaryBody("file", inputStream, ContentType.DEFAULT_BINARY, file.getOriginalFilename());
        //设置参数
        entityBuilder.addTextBody("target", target, ContentType.create("text/plain", Charset.forName("UTF-8")));

        httpPost.setEntity(entityBuilder.build());
        httpPost.setConfig(requestConfig);
        HttpResponse httpResponse = httpclient.execute(httpPost);
        String flag = EntityUtils.toString(httpResponse.getEntity());
        System.out.println(EntityUtils.toString(httpResponse.getEntity()));
        return flag;
    }

原因分析:

 HttpResponse httpResponse = httpclient.execute(httpPost);
        String flag = EntityUtils.toString(httpResponse.getEntity());
        System.out.println(EntityUtils.toString(httpResponse.getEntity()));
        return flag;
        
EntityUtils.toString(httpResponse.getEntity())方法中操作的是流数据,流数据是一次性数据所以同一个HttpEntity不能使用多次该方法.

 return EntityUtils.toString(httpclient.execute(httpPost).getEntity());改成一行就解决了
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: org.apache.http.client.ClientProtocolException: null 是一个Java异常,通常在使用Apache HttpClient时出现。它表示在执行HTTP请求时发生了协议错误,但具体的错误原因未知。可能是由于服务器返回的响应不符合HTTP协议规范,或者由于客户端请求的格式不正确。要解决这个问题,可以尝试检查请求和响应的内容,确保它们符合HTTP协议规范。如果问题仍然存在,可以尝试使用其他HTTP客户端库或调整请求和响应的格式。 ### 回答2: org.apache.http.client.ClientProtocolException: null是一种常见的网络异常,它通常发生在使用HttpClient进行网络请求时。这个异常的产生是因为服务器没有正确响应请求而导致的。 在进行网络请求时,如果服务器没有响应请求或者响应不符合规范,就会导致这个异常的产生。这个异常会给我们一个null,因为在HttpClient内部调用getEntity方法时,服务器没有正常响应导致没有获取到正常数据。 这个异常可以通过以下几种方式来避免或者解决: 1. 检查网络连接是否正常。如果网络连接不正常,就会导致请求无法发送或者响应无法返回,进而导致这个异常的产生。 2. 使用正确的请求方式和参数。如果请求方式或者请求参数不正确,服务器就会无法正常响应,这时候也会导致这个异常的产生。 3. 检查服务器是否正常运行。如果服务器出现问题,就会无法正常响应请求,这时候也会导致这个异常的产生。 4. 使用try-catch语句进行异常处理。如果发生了这个异常,可以使用try-catch语句来捕获并进行处理,以避免程序崩溃。 综上所述,org.apache.http.client.ClientProtocolException: null是一种常见的网络异常,通常发生在使用HttpClient进行网络请求时。我们可以通过检查网络连接、使用正确的请求方式和参数、检查服务器是否正常运行以及使用try-catch语句来避免或者解决这个异常。 ### 回答3: org.apache.http.client.clientprotocolexception: null是一个Java异常,在使用Apache HttpClient时可能会抛出此异常。该异常表示一个协议错误,往往发生在客户端与服务器之间进行通信时。 通常情况下,这个异常出现的原因是: 1. 服务器返回的响应不是HTTP协议规范中所定义的格式,如响应头缺失或格式错误。 2. 服务器返回的响应数据过大,导致网络传输中断或超时。 3. SSL/TLS握手失败。 4. 网络连接被重置或关闭。 要解决这个异常,可以采取以下几个方法: 1. 检查服务器响应是否符合HTTP协议规范。 2. 增加网络传输的超时时间,避免传输中断。 3. 检查SSL/TLS证书是否合法,或是否存在中间人攻击等安全问题。 4. 判断网络连接是否正常,如网络故障、防火墙屏蔽等。 总的来说,org.apache.http.client.clientprotocolexception: null这个异常是在使用HttpClient发生协议错误时会出现的,解决方法也比较固定,主要是检查服务器响应和网络连接是否正常。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值