如何在 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());
}
}
我正在尝试使用 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());
}
}