как пройти аутентификацию на сервисе odata2 в java? (Basi c Auth) - PullRequest
0 голосов
/ 27 февраля 2020

Я пытаюсь сделать запрос с java для этого API OData2 => https://scihub.copernicus.eu/dhus/odata/v1/ для проекта. Но я не могу без аутентификации. У меня есть личные журналы, как пользователь, у меня нет проблем. Когда я пытался с java, это выдало ошибку 401.

Я пробую это:

     String auth = user + ":" + password;
     HttpURLConnection connection = (HttpURLConnection) url.openConnection();
     String basicAuth = "Basic " + new String(new Base64().encode(auth.getBytes()));
    connection.setRequestProperty("Authorization", basicAuth);
    connection.connect();
    int responseCode = connection.getResponseCode();
    System.out.println(responseCode);
    System.out.println(url.toString());

Но это не работает. Когда я печатаю код отклика, у меня появляется ошибка 400, и я пытаюсь использовать другой код, это была ошибка 401.

С PostMan мне нужен только BasicAuth для доступа, и он работает. И я использую Olingo2.

Я новичок в java сети, и я понятия не имею. На первом этапе я хочу только аутентификацию. И затем делать запросы.

Спасибо!

1 Ответ

0 голосов
/ 28 февраля 2020

Для случая 401 что-то не так с авторизацией, в противном случае общий подход верен.

Для случая 400 браузеры и инструменты, такие как почтальон, автоматически отправят дополнительные заголовки, которых код будет отсутствовать , Я повторно использовал код about, передал дополнительный заголовок Accept : application/xml и смог получить ответ. Ниже приведен рабочий код. Ура!

import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.Base64;

public class Test1 {

    public static void main(String[] args) throws IOException {
        String user = "ENTER YOUR USERNAME";
        String password = "ENTER YOUR PASSWORD";
        String auth = user + ":" + password;
        URL url = new URL("https://scihub.copernicus.eu/dhus/odata/v1/");

        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setRequestMethod("GET");
        connection.setRequestProperty("Accept", "application/xml");
        String basicAuth = "Basic " + Base64.getEncoder().encodeToString((auth).getBytes(StandardCharsets.UTF_8)); // Java
        connection.setRequestProperty("Authorization", basicAuth);
        connection.connect();
        System.out.println(connection.getResponseCode());
        System.out.println(connection.getContent());

    }

}
...