Как исправить исключение тайм-аута шлюза HTTP 504 - PullRequest
0 голосов
/ 14 октября 2019

Я пытаюсь GET-запрос к другому API, чтобы получить ответ json.

Когда я делаю запрос с кодом ниже, я получаю HTTP 504 Ошибка (ошибка тайм-аута шлюза).

Однако, когда я попробовал его через инструмент rest клиент, запрос не выдает никакой ошибки.

Как мне увеличить промежуток времени в моем коде, чтобы избежать ошибки тайм-аута?

Thisкак выглядит вызов:

HttpClient httpClient = getBasicAuthDefaultHttpClient();
String url= "http://XXXXX";
HttpGet httpGet = new HttpGet(url);
httpGet.addHeader("id", id);
httpGet.addHeader("secret", secret);
httpGet.addHeader("network_val", networkval);

HttpResponse response = httpClient.execute(httpGet);
HttpEntity entity = response.getEntity();

if (entity != null && response.getStatusLine().getStatusCode() == HttpStatus.OK.value()) {
    ObjectMapper objectMapper = new ObjectMapper();
    restInfo = objectMapper.readValue(entity.getContent(), MyClass.class);
} else {
    logger.error("Call to API failed: response code = {}", response.getStatusLine().getStatusCode());
}

Обратите внимание:

Может ли это быть как-то связано с «https»?

Когда япопробуйте через http через мой клиент REST Insomnia Я получил ОШИБКУ: ошибка: ошибка при получении данных от однорангового узла. https работает нормально, без ошибок (https://XXXXX)

1 Ответ

0 голосов
/ 24 октября 2019

Это то, что я пытался.

public HttpClient getBasicAuthDefaultHttpClient() {
    CredentialsProvider provider = new BasicCredentialsProvider();
    UsernamePasswordCredentials creds = new UsernamePasswordCredentials(user, 
    password);
    provider.setCredentials(AuthScope.ANY, creds);

    //Fix to avoid HTTP 504 ERROR (GATEWAY TIME OUT ERROR)
    RequestConfig.Builder requestBuilder = RequestConfig.custom();
    requestBuilder.setConnectTimeout(30 * 1000);
    requestBuilder.setConnectionRequestTimeout(30 * 1000);

    HttpClientBuilder builder = HttpClientBuilder.create();
    builder.setDefaultRequestConfig(requestBuilder.build());
    builder.setDefaultCredentialsProvider(provider).build();

    return builder.build();
}
...