Можно ли ускорить время запроса на сервер на Java?

147
14 ноября 2018, 04:30

Мне нужно сделать 700 запросов на различные json.

К примеру, если я делаю один из таких запросов, то получение ответа занимает 12 секунд. Соотвественно на все 700 запросов уйдет около 2 часов.

Я использовал библиотеки HtmlUnit(net.sourceforge.htmlunit ) и rest-assured(com.jayway.restassured)

Пример кода на HtmlUnit на два запроса:

WebClient client = new WebClient();
    Page page = client.getPage("https://api.privatbank.ua/p24api/exchange_rates?json&date=01.12.2014");
    WebResponse response = page.getWebResponse();
    Page page2 = client.getPage("https://api.privatbank.ua/p24api/exchange_rates?json&date=02.12.2014");
    WebResponse response2 = page2.getWebResponse();
    System.out.println(response.getContentAsString());
    System.out.println(response2.getContentAsString());

Пример кода на rest-assured на два запроса:

String sURL ="https://api.privatbank.ua/p24api/exchange_rates?json";
    Map<String, String> queryParms= new HashMap<>();
    queryParms.put("date", String.valueOf("01.12.2014"));
    Response response =  RestAssured.expect().statusCode(200).given()
            .queryParameters(queryParms)
            .log().all()
            .when()
            .get(sURL)
            .then().assertThat()
            .log().all()
            .extract().response();
    System.out.println(response.getBody().asString());
    String sURL ="https://api.privatbank.ua/p24api/exchange_rates?json";
    queryParms.put("date", String.valueOf("02.12.2014"));
    Response response =  RestAssured.expect().statusCode(200).given()
            .queryParameters(queryParms)
            .log().all()
            .when()
            .get(sURL)
            .then().assertThat()
            .log().all()
            .extract().response();
    System.out.println(response.getBody().asString());

С другой стороны, если я делаю запрос через браузер на те же адреса, к примеру через Chrome, то запрос происходит мгновенно.

Как на Java делать такие же быстрые запросы?

Answer 1

Как минимум, можно распараллелить отправку запросов, используя асинхронный AsyncHttpClient.

Про саму настройку пула подключений читать тут.

READ ALSO
Взаимодействие двух программ

Взаимодействие двух программ

Есть змейка, написанная на языке Processing (по факту, это огромная библиотека для Java)Есть алгоритм, который будет играть в змейку, но написанный...

209
Дополнительные (бесполезные) ROLLBACK&#39;и при использовании BasicDataSource из commons-dbcp

Дополнительные (бесполезные) ROLLBACK'и при использовании BasicDataSource из commons-dbcp

Если экземпляр BasicDataSource из Apache commons-dbcp (версии 14, т

158