HttpClient抓取每个URL时,JVM都会自动缓存这个URL和对应的IP,而且是永远缓存,除非缓存内容大于了JVM的限制(DNS缓存在操作系统和JDK内部已经实现)。如果以后URL对应的IP更换了,HttpClient首先会去JVM的缓存取,如果取到了直接根据这个IP去抓取。如果IP更换了,会报604错误。
解决办法:在Java代码里面添加下面一句代码:
java.security.Security.setProperty("networkaddress.cache.ttl" , "0");
这样做是为了把域名的TTL值(生存时间)设置为0,也就是每次请求都会像DNS服务器请求最新的IP。