403 Forbibben в API Rest Call - PullRequest
       3

403 Forbibben в API Rest Call

0 голосов
/ 25 января 2019

Я пишу небольшую программу на Java, которая выполняет вызов rest для конечной точки для проверки идентификатора ссылки. Я написал эту программу двумя различными способами, и каждый из них работает, когда я запускаю ее со своего ПК, но когда я развертываю файл jar на тесте Linux CentOs Server, я получаю 403 forbidden error с конечной точки, поэтому я подумал, что, возможно, ip был заблокирован, а затем я попробовал то же самое с curl, и он работал отлично.

В чем может быть проблема? это может быть ошибка версии сертификата ssl?

Путь 1:

public String sendGet(String id) {
    restTemplate = new RestTemplate();
    log.info("Authorization :::: {}", "Bearer " + this.getApiAuth());

    HttpHeaders headers = new HttpHeaders();

    headers.set("Authorization", "Bearer " + this.getApiAuth());

    List<MediaType> acceptableMediaTypes = new ArrayList<>();

    acceptableMediaTypes.add(MediaType.APPLICATION_JSON);
    headers.setAccept(acceptableMediaTypes);
    headers.setContentType(MediaType.APPLICATION_JSON);

    HttpEntity<String> httpRequestEntity = new HttpEntity<>(headers);
    ResponseEntity<String> exchange = getRestTemplate().exchange(this.getUrl() + id, HttpMethod.GET, httpRequestEntity, String.class);

    log.info("Status Code :::: {}", exchange.getStatusCode());
    log.info("Status Code :::: {}", exchange.getBody());
    return exchange.getBody(); 
}

Путь 2:

 public String sendGet(String message) throws Exception {
    infoLogger.info("GOING HERE " + url + message);

    java.lang.System.setProperty("https.protocols", "TLSv1,TLSv1.1,TLSv1.2");
    URL obj = new URL(url + message);
    HttpsURLConnection con = (HttpsURLConnection) obj.openConnection();

    con.setRequestMethod("GET");

    infoLogger.info("Setting Authorization: Bearer " + this.getApiAuth());
    con.setRequestProperty("Authorization", "Bearer " +this.getApiAuth());
    con.setRequestProperty("Content-Type", MediaType.APPLICATION_JSON_VALUE);
    con.setRequestProperty("accept", MediaType.APPLICATION_JSON_VALUE);

    int responseCode = con.getResponseCode();
    infoLogger.info("\nSending 'GET' request to URL : " + url);
    infoLogger.info("Response Code : " + responseCode);

    BufferedReader in = null;
    String inputLine;
    StringBuilder response = new StringBuilder();

    if ((200 <= con.getResponseCode()) && (con.getResponseCode() <= 299)) {
        if (con.getInputStream() != null) {
            in = new BufferedReader(new InputStreamReader(con.getInputStream()));
        }
    } else if (con.getErrorStream() != null) {
        in = new BufferedReader(new InputStreamReader(con.getErrorStream()));
    } else {
        infoLogger.info("GOT NOTHING ");
    }

    while ((inputLine = in.readLine()) != null) {
        response.append(inputLine);
    }
    in.close();

    //print result
    System.out.println(response.toString());
    return response.toString();

}

Итак, я выполнил .getResponseMessage в соответствии с запросом и получил следующую ошибку:

Доступ запрещен | api.paystack.co использовал Cloudflare, чтобы ограничить accessbody {margin: 0; padding: 0} Пожалуйста, включите куки.

Ошибка 1010 ID луча: 49f12b9b9bb6c5fa & bull; 2019-01-26 07:12:17 UTC

Доступ запрещен Что случилось?

Владелец этого веб-сайта (api.paystack.co) заблокировал ваш доступ на основании подписи вашего браузера (49f12b9b9bb6c5fa-ua21).

Идентификатор луча Cloudflare: 49f12b9b9bb6c5fa & bull; Ваш IP: 104.248.9.123 & bull; Производительность и безопасность Cloudflare

window._cf_translation = {}; `

1 Ответ

0 голосов
/ 26 января 2019

Поставщик службы, к которой вы пытаетесь получить доступ, использует CloudFlare. Они используют какую-то проверку целостности браузера (см. https://support.cloudflare.com/hc/en-us/articles/200171806-Error-1010-The-owner-of-this-website-has-banned-your-access-based-on-your-browser-s-signature).

Вы можете изменить подпись в своем коде Java:

con.setRequestProperty("User-Agent", "My own REST client");

Похоже, вы используете другой JDK на вашем ПК, чем на вашем сервере CentOS, поэтому сигнатуры Java HttpsURLConnection отличаются. Они конечно отличаются от скручиваемости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...