如何在 java 中对 odata2 服务进行身份验证? (基本授权)

how to authenticate on an odata2 service in java? (Basic Auth)

我正在尝试使用 java 在此 OData2 API => 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());

但它不起作用。当我打印 responseCode 时出现 400 错误,我还尝试了另一个代码,它是 401 错误。

对于 PostMan,我只需要 BasicAuth 就可以访问并且它可以工作。 我正在使用 Olingo2。

我是 java 网络新手,我不知道。 在第一步中,我只想进行身份验证。 然后做查询。

谢谢!

对于401的情况是授权有问题,否则一般的做法是对的。

对于 400 的情况,浏览器和 postman 等工具会自动发送额外的 headers,代码将丢失。我重新使用了关于代码并传递了一个额外的 header 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());

    }

}