分析http请求数据常见异常

1.ConnectException连接超时

访问该地址超时,无法连接该服务器。
这种情况直接抓取该异常提醒即可。

2.SocketTimeoutException读取数据超时

注:可以用过URL类.getxxx方法获取url的主机名端口号等等(new URL(url))
能连接服务器,但是与服务器交互时间超过请求最大连接时长。
这种情况需要对目标主机进行ping操作确定网络速度。(kB/s)
ping ip -l 1000 -n 4 -w 60000
其中-l 1000 代表字节数默认为32,-n 4代表目标主机返回请求数量,-w 60000代表最大连接时间
使用Process类和Runtime.getRuntime().exec(命令字符串)模拟ping操作。
使用Process.inputstream()获取进程输入信息。
使用inputstreamReader(字节流,编码类型)将字节根据编码类型读取成字符。
使用BufferReader包装inputstreamReader可以提高效率。

Process proc = Runtime.getRuntime().exec("ping "+new URL(url).getHost()+" -l 10000 -n 4 -w 60000");
BufferedReader br = new BufferedReader(new InputStreamReader(proc.getInputStream(), Charset.forName("GBK"))); //命令行中的字符为gbk,所以要根据gbk类型来读取。解决打印在idea乱码问题
    while (br.readLine()!=null){
     	System.out.println(br.readLine());
       }

3.计算请求耗时和下载资源平均网速

请求耗时:请求前后获取系统时间相减即可。
System.currentTimeMillis获取系统时间(long)
平均网速:获取资源字符长度除于请求时间,获取大概网速。或者直接模拟ping也行。
获取资源字符长度:读取到的字符.getBytes().length(字节)
1字节 = 8bit比特 1kB/s = 8 kb/s
所以直接ping一定字节获取到时间,直接除于就获得了网速。
在这里插入图片描述
这样子最起码知道是大于32kB/s的(时间的1000就化作k了,代表千字节每秒)

4.后续问题

4.1bufferReader的readline函数读到空行时会停止读取,这样ping命令后面的统计信息就读取不到

解决方法请看这篇文章: BufferedReader踩坑

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值