Apache Async HTTP отправляет запросы с новым прокси на каждый запрос - PullRequest
0 голосов
/ 22 февраля 2019

Мне нужно постоянно проверять тысячи прокси-серверов.

Чтобы ускорить его, я думаю создать пакет размером 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 прокси-серверов, мне нужно создать нового клиента для каждого из них.Это означает, что запросы не будут параллельными и лучше, если я просто использую многопоточное решение.

Проблема в том, что если я использую многопоточность, то я буду чрезмерно загружать сервер, поскольку большинство потоков будетблок ввода / вывода.Параллельный неблокирующий ввод / вывод намного лучше для этого типа задач.

Как я могу одновременно проверить несколько прокси-серверов, прошедших проверку подлинности, если мне нужно создать клиент для каждого из них?

...