java https httpsurlconnection 代理(proxy)请求时返回407 Proxy Authentication Required

时间:2025-04-01 11:11:31

在java中使用HttpUrlConnection发送请求时,正确配置了代理,当转发http请求时无问题,而转发https请求时,返回了407响应码,而407表示为:Proxy Authentication Required。明确告知没有通过代理服务器身份认证。通过网络抓包可以发现在发送https请求时,网络的请求头里边没有携带身份认证信息。

原因:从jdk8 update 111版本开始,java禁止对 HTTPS 隧道执行“基本”验证

在一些环境中,在执行 HTTPS 代理时某些验证方案可能不是所希望的验证方案。相应地,默认情况下在 Oracle Java 运行时中已停用“基本”验证方案,方法为将 Basic 添加到  网络属性。现在,在为 HTTPS 设置隧道时,默认情况下需要 Basic 验证的代理将不再成功。如果需要,可以通过从  网络属性中删除 Basic,或者通过在命令行上将同名的系统属性设置为 ""(空),来重新激活此验证方案。此外,可以使用  和  网络属性以及同名的系统属性来禁用其他一些验证方案。在为 HTTPS 设置隧道或者执行普通 HTTP 代理时,这些验证方案可能分别处于活动状态。JDK-8160838(非公共)

参考:

JavaTM SE Development Kit 8, Update 111 Release Notes

/zh_CN/download/faq/release_changes.xml?printFriendly=true

解决办法:

方式一:jdk根目录/jre/lib/文件中把下面两个值设置为空

=
=

方式二:在代码中设置

  1. ("", "");
  2. ("", "");

方式三:设置java启动虚拟机参数:

-= -=