项目之前跑着一直都很正常,突然获取不到数据了,换了几个不同的网络进行测试,现象为:浏览器可以正常访问获取数据,curl命令行测试报错“curl: (56) Recv failure: Connection reset by peer”,程序无法正常获取数据。
程序后台报错日志
1 | 2022-05-10 00:16:00.064 [ RenrenScheduler_Worker-4 ] - [ ERROR ] [ io.renren.utils.ScheduleJob : 64 ] - 任务执行失败,任务ID:1487708039686402049 |
curl 测试报错
1 | --GET |
调整过系统最大链接数,调整过系统最大打开文件数,优化过请求响应时间都未能解决这个问题。
经过多次不同的网络环境,不同的服务器进行测试,可能是因为数据获取太频繁,被网络完全设备判断为爬虫行为进行控制了,尝试添加一个useragent
1 | curl -A "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36" "http://x.x.x.x/china/monitor/city-hour?pollute=AQI&monitorTime=2022-05-09+14" |
至此,总算是找到原因了,在程序中添加一个useragent应该就可以解决掉这个问题了。
ps:顺便推荐几个工具tcping,pathping,httping,psping