HttpClient в цикле - PullRequest
       20

HttpClient в цикле

1 голос
/ 07 января 2020

Я использую Apache HttpClient для вызова API внутри пакетной (STANDALONE) JAVA программы. Ниже приведен код

HttpClient httpClient = new HttpClient();
httpClient.getParams().setIntParameter("http.connection.timeout",5000);
PostMethod postMethod = new PostMethod("http://localhost:8080/endpoint");

for (String strRequest:listA) {
    postMethod.setRequestEntity(new StringRequestEntity(strRequest,"application/json","UTF-8"));
    postMethod.addRequestHeader("Content-Type","application/json");
    postMethod.addRequestHeader("Accept","application/json");
    int statusCode = httpClient.executeMethod(postMethod);
    if (statusCode !=200) {
        responseBodyStr = postMethod.getResponseBodyAsString();
    } else {
        responseBodyStr = postMethod.getResponseBodyAsString();
    }
    System.out.println(responseBodyStr);
}

На второй итерации я получаю ошибку 400 (время ожидания сокета). Есть ли способ сбросить httpClient здесь, чтобы я мог повторно использовать тот же объект. Это также поможет с моим модульным тестированием. Это упрощенная версия кода. Фактический код имеет много обработки на основе ответа, полученного от API.

1 Ответ

0 голосов
/ 07 января 2020
HttpClient httpClient = null;

PostMethod postMethod = new PostMethod("http://localhost:8080/endpoint");

for (String strRequest:listA) {
   httpClient = new HttpClient();
   httpClient.getParams().setIntParameter("http.connection.timeout",5000);
        postMethod.setRequestEntity(new StringRequestEntity(strRequest,"application/json","UTF-8"));
        postMethod.addRequestHeader("Content-Type","application/json");
        postMethod.addRequestHeader("Accept","application/json");
        int statusCode = httpClient.executeMethod(postMethod);
        if (statusCode !=200) {
            responseBodyStr = postMethod.getResponseBodyAsString();
        } else {
            responseBodyStr = postMethod.getResponseBodyAsString();
        }
        System.out.println(responseBodyStr);
}

Можете ли вы попробовать это.

...