怎么解决jsoup不能完整获取响应内容的问题

当使用jsoup访问http的接口时,但如果遇到不能完整获取响应内容时,一般有以下几个原因。

1. 网络异常,造成读取不全。这个很少发生,因为jsoup会报告exception

2. 网络超时,此时可以设置 connection.timeout(n) 增加超时时间。

3. 一切看起来都正常,也没有异常发生。 但是获取的数据就是少了一截。


这里主要将第三点。

仔细分析获取到的数据,发现得到数据都是1024k。

如果获取到的数据不超过1024k,程序正常,得到的数据也正常。

一旦数据超过1024k时,数据就只有预期得到数据的前1024k字节了。

仔细查找jsoup的api 发现,默认设置下,jsoup最大获取的响应长度正好时1M。

所以这个时候只要设置 connection.maxBodySize(0),设置为0,就可以得到不限响应长度的数据了。

完整代码就是

public String getImage(String caseId,String type) {
		String imageData = "";
    	String url = PropKit.get("getImageUrl");
    	Connection connection = Jsoup.connect(url);
        connection.method(Connection.Method.GET);
        connection.timeout(24000);
        connection.header("Content-Type", "multipart/form-data");
        connection.ignoreHttpErrors(true);
        connection.ignoreContentType(true);
        connection.maxBodySize(0);
        Map map = new HashMap();
        map.put("_id", caseId);
        map.put("type", type);
        connection.data(map);
        Response response;
		try {
			response = connection.execute();
			if (response.statusCode() == HttpStatus.OK_200) {
	            //throw new Exception("http请求响应码:" + response.statusCode() + "");
	        	Gson gson = new Gson();
	        	String body = response.body();
	            Map resultMap = gson.fromJson(body, HashMap.class); 
	            imageData = (String) ((Map)resultMap.get("data")).get("image");
	            System.out.println(response.body());
	        }else{
	        	logger.error("http请求响应码:" + response.statusCode() );
	        }
		} catch (IOException e) {
			e.printStackTrace();
		}
		return imageData;
    }

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值