如何解决Java:读取需要登录的远程XML
我有一个Spring Boot应用程序,它需要读取一个XML文件,该文件可以在线(通过https)访问,但需要登录(如果有帮助,它由Redmine API生成)。我有一个经过测试且可以使用用户名和密码的帐户,并且可以正常工作(可以通过浏览器登录),并且尝试使用JCIFS,如下所示,但是我遇到了“连接超时”错误(该XML文件肯定位于时间)。我在做什么错了?
NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(null,USERNAME,PASSWORD);
try (InputStream is = new SmbFile("https://mypath/issues.xml?limit=100",auth).getInputStream()) {
System.out.println(is.toString());
} catch (IOException e) {
// Handle IOException
}
解决方法
您可以在没有任何第三方库的情况下完成此操作,请参阅此博客文章:
https://www.baeldung.com/java-http-url-connection
和一个简短示例:
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.URL;
import java.net.URLConnection;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
public class AuthenticationTest {
public static void main(String[] args) throws IOException {
String url = "https://mypath/issues.xml?limit=100";
String user = "user";
String password = "pass";
String auth = user + ":" + password;
byte[] encodedAuth = Base64.getEncoder().encode(auth.getBytes(StandardCharsets.UTF_8));
String authHeaderValue = "Basic " + new String(encodedAuth);
char[] buffer = new char[1024];
int len = -1;
URLConnection connection = new URL(url).openConnection();
connection.setRequestProperty("Authorization",authHeaderValue);
try (Reader reader = new InputStreamReader(connection.getInputStream())) {
StringBuilder builder = new StringBuilder();
while ((len = reader.read(buffer)) != -1) {
builder.append(buffer,len);
}
System.out.println(builder.toString());
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。