Изучите распространенные библиотеки инструментов HTTP в Java.
Изучите распространенные библиотеки инструментов HTTP в Java.

Предисловие

Обычно я использую множество сканеров. Мой первый сканер был написан с использованием Java jsoup. Проще говоря, сканер отправляет запросы к различным веб-страницам, и для инициирования запроса вам необходимо использовать библиотеку инструментов HTTP. Сегодня давайте перечислим различные библиотеки инструментов, обычно используемые в Java, и проанализируем их преимущества и недостатки на уровне кода.

HttpURLConnection

HttpURLConnection — это собственный HTTP-клиент, входящий в состав стандартной библиотеки Java java.net. Jsoup реализован на основе HttpURLConnection. Здесь мы используем HttpURLConnection для реализации простого запроса для изучения его использования.

Язык кода:java
копировать
String start_url = "http://www.baidu.com";
URL url = new URL(start_url);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("GET");

int status = con.getResponseCode();
if (status == HttpURLConnection.HTTP_OK) {
    BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
    String inputLine;
    StringBuilder content = new StringBuilder();
    while ((inputLine = in.readLine()) != null) {
        content.append(inputLine);
    }
    in.close();
    System.out.println(content.toString());
} else {
    System.out.println("Код состояния:" + status);
}
con.disconnect();

Выполнить код:

Как видите, HttpURLConnection относительно прост в использовании и позволяет пользователям лучше понимать процесс запроса и ответа. Однако пользователям необходимо вызывать базовые API, например создавать URL-адреса и получать данные ответа, что требует написания большого количества кода.

Apache HttpClient

Введем зависимость HttpClient:

Язык кода:xml
копировать
<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.13</version>
</dependency>

Используйте HttpClient для реализации простого кода запроса.

Язык кода:java
копировать
String start_url = "http://www.baidu.com";

CloseableHttpClient httpClient = HttpClients.createDefault();
HttpGet httpGet = new HttpGet(start_url);
try (CloseableHttpResponse response = httpClient.execute(httpGet)) {
    HttpEntity entity = response.getEntity();
    if (entity != null) {
        String result = EntityUtils.toString(entity, "utf-8");
        System.out.println("Данные, возвращаемые сервером: " + result);
    }
} catch (IOException e) {
    e.printStackTrace();
}

При выполнении программы также выводится содержимое домашней страницы Baidu. В дополнение к этому простому использованию httpclient поддерживает настройки заголовка запроса:

Язык кода:java
копировать
// Установить заголовок запроса
httpGet.addHeader("Content-Type", "application/json");
// Установить соединение и прочитать таймауты
httpGet.setParams(RequestConfig.custom().setSocketTimeout(5000).setConnectTimeout(5000).build()); 

Вы также можете использовать пул соединений для повышения производительности:

Язык кода:java
копировать
PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager();
cm.setMaxTotal(100); 
CloseableHttpClient httpClient = HttpClients.custom()
        .setConnectionManager(cm)
        .build();

Кроме того, он также предоставляет гибкие возможности конфигурации и различные функции настройки, подходящие для обработки сложной аутентификации HTTP-запросов, перенаправления, добавления прокси и других функций.

Но слишком большое количество параметров конфигурации может сбить с толку начинающих пользователей. Особенно новички. Когда я впервые использовал HttpClient в 2018 году, меня смущали различные конфигурации параметров.

OkHttp

В повседневной работе чаще используется OkHttp. С официального сайта я узнал, что oKHttp имеет следующие преимущества:

  1. Поддержка HTTP/2 позволяет всем запросам к одному и тому же хосту использовать общий сокет.
  2. Пул соединений уменьшает задержку запросов (.
  3. Прозрачное сжатие (Transparent GZIP) уменьшает размер интерактивных данных и снижает нагрузку на сетевой ввод-вывод.
  4. Кэширование ответов полностью позволяет избежать повторных сетевых запросов.
  5. При возникновении проблем с сетью OkHttp автоматически устраняет распространенные проблемы с подключением.

Затем я изучил API и увидел, как использовать OkHttp для инициации http-запроса.

Язык кода:java
копировать
String start_url = "http://www.baidu.com";
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
        .url(start_url)
        .build();

try {
    Response response = client.newCall(request).execute();
    ResponseBody responseBody = response.body();
    if (responseBody != null) {
        String result = responseBody.string();
        System.out.println("Данные, возвращаемые сервером: " + result);
    }
} catch (IOException e) {
    e.printStackTrace();
}

Выполните запрос вывода кода:

Такое ощущение, что недостатков нет. .

Spring RestTemplate

Платформа Spring интегрирует RestTemplate. Поскольку HTTP-клиент использует платформу Spring, он может не подходить для приложений, отличных от Spring.

Заключение

Выше приведена библиотека инструментов HTTP, с которой я сталкивался в повседневной разработке. Судя по вышесказанному, каждая HTTP-библиотека имеет свои преимущества и недостатки. Разработчики могут выбрать подходящую библиотеку HTTP в зависимости от конкретных потребностей проекта. Новички могут использовать HttpURLConnection, чтобы узнать и понять, что ответы на HTTP-запросы на самом деле являются операциями ввода-вывода.

Для сложных HTTP-запросов вы можете рассмотреть возможность использования Apache HttpClient или OkHttp, но OkHttp наиболее широко используется в реальных приложениях разработки, особенно в сценариях с высоким уровнем параллелизма.

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose