Что я пытаюсь сделать достичь:
Согласно документации API FlightRadar24, я хочу получить данные о полете следующим образом:
- Использование базового URL-адреса https://fr24api.flightradar24.com/api.
- Отправка моего токена API в заголовке авторизации в качестве токена носителя.
- Настройка API версию в заголовке Accept-Version до v1.
- Выполнение запроса GET к соответствующей конечной точке.
Код: Выделить всё
package ch.ais.www.services;
import java.util.Collections;
import org.springframework.http.*;
import org.springframework.web.client.RestTemplate;
public class Fr24Service {
private final RestTemplate restTemplate = new RestTemplate();
private final String apiToken = "your_api_token_here";
private final String baseUrl = "https://fr24api.flightradar24.com/api";
public String getFlightData(String flightId) {
String url = String.format("%s/flights/%s", baseUrl, flightId);
// Set headers
HttpHeaders headers = new HttpHeaders();
headers.setBearerAuth(apiToken); // Set Authorization header
headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));
headers.add("Accept-Version", "v1");
headers.add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64)");
// Create request entity
HttpEntity entity = new HttpEntity(headers);
// Send GET request
ResponseEntity response;
try {
response = restTemplate.exchange(
url, HttpMethod.GET, entity, String.class);
} catch (HttpClientErrorException e) {
// Handle HTTP errors
System.err.println("HTTP Status Code: " + e.getStatusCode());
System.err.println("Response Body: " + e.getResponseBodyAsString());
throw e;
}
if (response.getStatusCode() == HttpStatus.OK) {
return response.getBody();
} else {
// Error handling
throw new RuntimeException("Error fetching flight data: " + response.getStatusCode());
}
}
}
Когда я запускаю приложение, я получаю следующее исключение:
Код: Выделить всё
Exception in thread "main" org.springframework.web.client.HttpClientErrorException$Forbidden: 403 Forbidden: "
Attention Required! | Cloudflare
...
Дополнительная информация :
Я использую Java 21 и Spring RestTemplate.
Похоже, что Cloudflare обнаруживает и блокирует мой запрос как автоматический трафик.
API в документации указано, что токен API должен быть отправлен в заголовке авторизации и что версия API должна быть указана в заголовке Accept-Version.
Мой вопрос:
Как я могу успешно отправить запрос к API FlightRadar24 из моего Java-приложение без блокировки Cloudflare? Есть ли способ настроить RestTemplate (или другой HTTP-клиент) для доступа к API, несмотря на механизмы защиты Cloudflare, учитывая, что у меня есть законные учетные данные API?
Будем очень благодарны за любую помощь или предложения.
Примечание.
- Я исключил свой фактический токен API из кода для из соображений безопасности.
- Я понимаю, что Cloudflare может блокировать автоматические запросы, но поскольку у меня есть действительный доступ к API, должен быть способ правильно настроить мой клиент.
- Проверено, что мой apiToken верен.
- Убедился, что я устанавливаю авторизацию заголовок с токеном носителя.
- Добавлена версия Accept-Version. заголовок со значением v1.
- Включен заголовок User-Agent для имитации обычного браузера.
- Протестирован запрос API с помощью таких инструментов, как Postman и Curl. — там работает.
- Подтверждено, что URL-адрес конечной точки правильный.
- Пытался использовать WebClient из Spring WebFlux, но получаю ту же ошибку.
- Включено ведение журнала для проверки HTTP-запросов и ответов.
Подробнее здесь: https://stackoverflow.com/questions/792 ... -using-jav