我希望我的Java程序使用系统的代理配置.因此,我使用在许多地方找到的代码(例如此答案)设置java.net.useSystemProxies为true并调用ProxySelector.getDefault().select(...)以发现我想要访问的特定主机的代理.当我在Internet属性中配置单个显式代理服务器时,这可以正常工作.但是如果我设置了"使用自动配置脚本",它总是返回DIRECT"代理".
我知道该脚本有效,因为我的浏览器可以访问它为其返回代理服务器的主机,并且没有脚本集,它不能.我甚至尝试将脚本简化为最基本的要点:
function FindProxyForURL(url, host)
{
return "PROXY my.proxy.mydomain:3128";
}
Run Code Online (Sandbox Code Playgroud)
它在我的浏览器中工作,但ProxySelector.getDefault().select(...)仍然只返回DIRECT.
我错过了什么吗?(这是在Java 1.6和Windows 7上,它是否重要.)
我想知道在NTLM身份验证期间使用的6个参数可以自动化,这些参数是:
"用户名" - 用于登录当前正在使用的操作系统配置文件的用户名.- 已经自动化,使用System.getProperty("user.name")
"密码" - 与上述相同.- 可能不能自动化,但我一直都不确定,直到我试着问...
"ProxyAddress" - 代理的地址,身份验证被"握手"以便通过.- 我已经伪自动化,但它的固定代码,因此很糟糕.
"ProxyPort" - 代理上的侦听端口,先前已解释过.- 我已经伪自动化,但它的固定代码,因此很糟糕.
"工作站" - 我的PC在本地网络中的ID或其他东西......我目前正在使用我的机器的属性ID及其工作,但我不知道它是否是正确的值,或者是否需要值首先.- 不知道如何自动化,但我知道这是可能的.需要帮忙
"域名" - 不知道它指的是哪个域,因此不知道它应该具有什么价值...留空似乎正在工作...... - 不知道如何自动化,但我知道它是可能的.需要帮忙
额外信息:我正在使用HtmlClient库进行处理,包括身份验证.
DefaultCredentialsProvider credentialProvider = (DefaultCredentialsProvider) webClient.getCredentialsProvider();
credentialProvider.addNTLMCredentials(username, password, proxyAddress, proxyPort, workstation, domain);
webClient.setUseInsecureSSL(true);
Run Code Online (Sandbox Code Playgroud)