gpt4 book ai didi

Java - 状态 401 - JSoup 的 PAC 代理身份验证

转载 作者:行者123 更新时间:2023-11-30 05:37:14 26 4
gpt4 key购买 nike

我正在尝试使用 Jsoup 从网页收集元素,但我位于 PAC 代理后面。当我尝试使用 Jsoup 访问网站时,出现代码状态 401 身份验证错误。看来问题出在代理上。我已经安装了一个名为 Proxy-Vole 的库,它应该对我进行身份验证,但我相信我没有正确使用它。我希望最终对代理进行身份验证并尽可能继续。

ProxySearch proxySearch = new ProxySearch();
if (PlatformUtil.getCurrentPlattform() == Platform.WIN) {
proxySearch.addStrategy(Strategy.IE);
proxySearch.addStrategy(Strategy.FIREFOX);
proxySearch.addStrategy(Strategy.JAVA);
} else if (PlatformUtil.getCurrentPlattform() == Platform.LINUX) {
proxySearch.addStrategy(Strategy.GNOME);
proxySearch.addStrategy(Strategy.KDE);
proxySearch.addStrategy(Strategy.FIREFOX);
} else {
proxySearch.addStrategy(Strategy.OS_DEFAULT);
}

ProxySelector proxySelector = proxySearch.getProxySelector();
ProxySelector.setDefault(proxySelector);

Document doc = Jsoup.connect("https://www.whatever.com").get();

最佳答案

作为guide解释您应该为您的请求选择正确的代理。我使用 Java Streams 更新了示例代码:

URI uri = new URI("https://www.whatever.com");

Proxy proxy = Optional.ofNullable(ProxySelector.getDefault())
.map(ps -> ps.select(uri))
.stream().flatMap(List::stream)
.max(Comparator.comparing(Proxy::type))
.orElse(Proxy.NO_PROXY);

此示例按以下优先级使用代理:SOCKSHTTPDIRECT。您可以通过将其包装在单独的方法中来轻松更改它:

private static int getPriority(Proxy.Type type) {
switch (type) {
case HTTP:
return 2;
case SOCKS:
return 1;
}
return 0;
}

将此与 .max() 中的 Comparator.comparingInt(p -> getPriority(p.type())) 结合使用。或者,您可以使用我上面链接的官方示例代码。

您现在可以在 Jsoup 连接中使用该代理:

Document doc = Jsoup.connect(uri.toString())
.proxy(proxy)
.get();

除此之外,您还应该确保您的连接通过代理正常工作。如果您的代理需要身份验证,请按照 this part指南的。要进行故障排除,您可以使用 Proxy Vole Tester .

关于Java - 状态 401 - JSoup 的 PAC 代理身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56347057/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com