0

我必须不断检查成千上万的代理服务器。

为了加快速度,我正在考虑创建一批大小为 N(比如 50)并同时向它们发送请求。每个代理服务器都有唯一的 IP/端口和用户名/密码验证。

由于我正在检查代理,我将配置请求以使用给定的代理并向目标站点发送请求并测量响应。

以下是使用 Apache 客户端文档中的身份验证代理的示例:

 public static void main(String[] args)throws Exception {
        CredentialsProvider credsProvider = new BasicCredentialsProvider();
        credsProvider.setCredentials(
                new AuthScope("localhost", 8889),
                new UsernamePasswordCredentials("squid", "nopassword"));
        CloseableHttpAsyncClient httpclient = HttpAsyncClients.custom()
                .setDefaultCredentialsProvider(credsProvider)
                .build();
        try {
            httpclient.start();
            HttpHost proxy = new HttpHost("localhost", 8889);
            RequestConfig config = RequestConfig.custom()
                    .setProxy(proxy)
                    .build();
            HttpGet httpget = new HttpGet("https://httpbin.org/");
            httpget.setConfig(config);
            Future<HttpResponse> future = httpclient.execute(httpget, null);
            HttpResponse response = future.get();
            System.out.println("Response: " + response.getStatusLine());
            System.out.println("Shutting down");
        } finally {
            httpclient.close();
        }
    }

如您所见,如果您使用的是经过身份验证的代理,则需要在客户端本身中提供凭据。这意味着如果我同时检查 50 个代理服务器,那么我必须为每个代理服务器创建一个新客户端。这意味着如果我只使用多线程解决方案,请求将不会并发并且更好。

问题是,如果我使用多线程,那么我会给服务器带来过多的负载,因为大多数线程会阻塞 I/O。并发非阻塞 I/O 更适合此类挑战。

如果我必须为每个代理服务器创建一个客户端,如何同时检查多个经过身份验证的代理服务器?

4

0 回答 0