0

我正在尝试实现一个简单的 URL 可用性检查器,它基本上检查链接是否可用(没有返回 HTTP 403、404 等)。

我的数据库中有超过 20,000 个链接(指向不同的服务器/网站)用于测试目的,但是当我尝试创建超过 10 个线程时它似乎不起作用。

这是我用于在每个 WorkerThread 中打开连接和读取响应代码的代码。

                    URL url = new URL(dto.getUrl());

                    httpUrlConnection = (HttpURLConnection) url.openConnection();
                    httpUrlConnection.setUseCaches(false);
                    // httpUrlConnection.setConnectTimeout(6000);
                    httpUrlConnection.setDoInput(true);
                    httpUrlConnection.setDoOutput(false);
                    httpUrlConnection.setRequestMethod("GET");
                    httpUrlConnection.setRequestProperty("Host", dto.getUrl().replace("http://", ""));
                    // httpUrlConnection.setRequestProperty("Connection",
                    // "Keep-Alive");
                    httpUrlConnection.setRequestProperty("User-Agent", USER_AGENT);
                    httpUrlConnection.setRequestProperty("Cache-Control", "no-cache");

                    httpUrlConnection.connect();

                    int code = httpUrlConnection.getResponseCode();

有多个线程打开连接时我注意到的几个问题:

1)只有前 100-200 个连接似乎没有问题打开,之后,我开始收到“读取超时”、“连接超时”、“连接重置”等。虽然,如果你尝试再次运行代码,链接已抛出上述异常将返回正确的响应代码(如果它们在前 100 个中得到处理)。

2) 响应代码有时无效(特别是如果链接是在前 100 个链接之后处理的)。我注意到有时会返回 404,而实际上它应该返回 200(我通过将链接放入前 100 来检查它)。

我确实尝试过使用 Apache 的 Http 客户端,但它也无法正确处理带有许多线程的链接。

那么有人知道这个问题的解决方案吗?您可以使用多线程使用 HttpURLConnection 打开的最大连接数是多少?有没有其他方法可以打开许多 HTTP 连接并检查响应代码?

谢谢大家 !

4

0 回答 0