美文网首页
使用httprequest时HttpRequestjava.io

使用httprequest时HttpRequestjava.io

作者: 冬月廿拾 | 来源:发表于2020-08-06 17:26 被阅读0次

在使用httprequest过程中遇到一个问题

com.github.kevinsawicki.http.HttpRequestjava.io.IOException: stream is closed
百度查找原因是I/O流只能读取一次,重复读取会导致异常

目前找到两种解决方案:

1、从根本解决:让它可以被多次重复读取
https://blog.csdn.net/zhibo_lv/article/details/81875705

2、只读取一次,将值写入变量,后续使用不再读取HttpRequest

事发代码:

    /**
     * contentType为json的post请求
     */
    public LctBaseResponse PostHttpRequest(URL requestUrl, String body, String cookie, String headers) {

        LctBaseResponse response = new LctBaseResponse();
        HttpRequest httpRequest ;
        HashMap headersMap = JSON.parseObject(headers, HashMap.class);
        try {
            logger.info("POST请求开始:" + "requestUrl=" + requestUrl + "cookie=" + cookie + "headers=" + headers);

            httpRequest =
                    HttpRequest.post(requestUrl).header("Cookie", cookie)
                            .contentType(HttpRequest.CONTENT_TYPE_JSON)
                            .headers(headersMap).send(body);

            if (httpRequest.body() == null || httpRequest.code() == 500){
                throw new InsurCoreException(ErrorCode.CLIENT_ERROR);
            }
            logger.info("返回结果: " + httpRequest.body());

            response.setCode(Integer.toString(httpRequest.code()));
            response.setData(httpRequest.body());
        }catch (Exception e){
            logger.error("调用失败: " + e);
            throw new InsurCoreException(ErrorCode.CLIENT_ERROR);
        }
        return response;
    }
  • 因为多次执行了httpRequest.body() 导致报错
    在尝试定位异常时,在这里打了断点,并在控制台打出了内容,控制台展示的返回正常,实际执行时又报错,当时极端想不明白,后来才明白,在第二次执行时I/O流已经关闭,再次读取时就出现流报错。

使用方法2处理后的代码

    /**
     * contentType为json的post请求
     */
    public LctBaseResponse PostHttpRequest(URL requestUrl, String body, String cookie, String headers) {

        LctBaseResponse response = new LctBaseResponse();
        HttpRequest httpresult ;
        HashMap headersMap = getHeaders(headers);
        try {
            logger.info("POST请求开始:requestUrl= {}  body= {}"  + requestUrl, body);

            httpresult =
                    HttpRequest.post(requestUrl).header("Cookie", cookie)
                            .contentType(HttpRequest.CONTENT_TYPE_JSON)
                            .headers(headersMap).send(body);

            String result = httpresult.body();

            if (result == null || httpresult.code() == 500){
                throw new LcToolsException(ErrorCode.CLIENT_ERROR);
            }
            logger.info("返回结果: " + result);

            response.setCode(Integer.toString(httpresult.code()));
            response.setData(result);
        }catch (Exception e){
            logger.error("调用失败: " + e);
            throw new LcToolsException(ErrorCode.CLIENT_ERROR);
        }
        return response;
    }```

相关文章

网友评论

      本文标题:使用httprequest时HttpRequestjava.io

      本文链接:https://www.haomeiwen.com/subject/krmnzhtx.html