Java配置带认证的Squid HTTP代理时出现认证失败问题求助
解决Java通过Squid代理认证失败的问题
你的代码里存在明显的拼写错误,这是触发Failed to authenticate with proxy的直接原因:
- 设置
http.proxyPassword和https.proxyPassword时,错误传入了用户名authUser,而非密码authPassword。
修正后的代码
String proxyHost = config.getString("ProxyHost").trim(); String proxyPort = config.getString("ProxyPort").trim(); final String authUser = config.getString("ProxyUser").trim(); final String authPassword = config.getString("ProxyPw").trim(); if (proxyHost != null && !proxyHost.isEmpty()) { DiscordSRV.debug("Proxy host setting to " + proxyHost); Authenticator.setDefault( new Authenticator() { @Override public PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(authUser, authPassword.toCharArray()); } }); try { System.setProperty("jdk.http.auth.tunneling.disabledSchemes", ""); // HTTP proxy System.setProperty("http.proxyHost", proxyHost); System.setProperty("http.proxyPort", proxyPort); System.setProperty("http.proxyUser", authUser); System.setProperty("http.proxyPassword", authPassword); // 修正密码参数 // HTTPS proxy System.setProperty("https.proxyHost", proxyHost); System.setProperty("https.proxyPort", proxyPort); System.setProperty("https.proxyUser", authUser); System.setProperty("https.proxyPassword", authPassword); // 修正密码参数 DiscordSRV.debug("Proxy successfully set"); } catch (Exception e) { DiscordSRV.debug("Proxy settings failed to apply"); e.printStackTrace(); // 添加异常打印,方便排查具体问题 } }
额外排查优化点
- 空值判断顺序调整:原代码先判断非空再判null,会触发空指针异常,修正为先判null再判空。
- 开启代理认证协议支持:如果Squid使用Basic认证,可添加以下属性确保JVM允许该认证方案:
System.setProperty("jdk.http.auth.proxying.disabledSchemes", "");
- 属性生效时机:必须在发起HTTP/HTTPS请求前完成所有系统属性设置,否则配置不会生效。
内容的提问来源于stack exchange,提问作者YueYue
相关产品推荐
相关产品推荐

