我正在尝试连接一个受摘要认证保护的网站。如果我尝试通过Insomnia或Firefox登录,我的凭据工作正常,但我无法让它在Java 17中工作(Insomnia的自动生成代码也不工作)。
我尝试遵循并理解以下教程/文档:
https://www.baeldung.com/java-9-http-client
https://docs.oracle.com/javase/7/docs/technotes/guides/net/http-auth.html
据我所知,两人都提到支持《文摘》。
当摘要验证失败时,我得到的结果总是状态代码401 &预期的报头:
www-authenticate=[摘要领域=“api领域”,qop=“身份验证”,随机数=“NONCE==”
以下是当前代码。方法 getPasswordAuthentication 未执行:
public void checkIsAPIRunning() {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://the-site-I-try-to-connect-with:443/api/function"))
.method("GET", HttpRequest.BodyPublishers.noBody()).build();
HttpResponse<String> response = null;
try {
response = HttpClient.newBuilder().authenticator(new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("user", "pass".toCharArray());
}
}).build().send(request, BodyHandlers.ofString());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
我是不是误解了这些文件?我希望得到任何帮助或指点:)
1条答案
按热度按时间t40tm48m1#
新的HttpClient不直接支持摘要式身份验证-请参阅此处:https://bugs.openjdk.org/browse/JDK-8285888
看起来,您应该自己处理身份验证过程。