我目前正在測試一個Web應用程序,並遇到了一個有趣的現象。在我的測試會話期間,我使用代理收集了URL。現在我想測試我的匿名訪問的URL列表,所以我寫了這個小工具在Java中抑制NTLM身份驗證
public static void main(String[] args) {
try {
TrustAllCerts.disableCertChecks();
FileReader fr = new FileReader(new File("urls.txt"));
BufferedReader br = new BufferedReader(fr);
String urlStr = br.readLine();
while (urlStr != null) {
if (urlStr.trim().length() > 0) {
URL url = new URL(urlStr);
HttpsURLConnection urlc = (HttpsURLConnection) url.openConnection();
urlc.connect();
if (urlc.getResponseCode() == HttpURLConnection.HTTP_OK) {
System.out.println(urlStr);
} else {
System.out.println("["+urlc.getResponseCode()+"] "+urlStr);
}
urlc.disconnect();
}
urlStr = br.readLine();
}
br.close();
} catch (Exception e) {
e.printStackTrace();
}
}
它基本上沒有什麼,但開在一個給定的URL的URL連接和測試HTTP響應代碼(其實我實現了一些更多的測試,如果我被重定向到登錄頁面)。但問題是,此特定應用程序(某些自定義MS SQL Server Reporting Services)配置爲使用NTLM WWW身份驗證。如果我嘗試訪問一些使用Firefox的URL,我會得到一個401 Unauthorized +登錄dlg。 Internet Exploder在後臺執行NTLM身份驗證並授予訪問權限。看起來,Java URLConnection(或URL)類的確如此,因爲我沒有得到401.有沒有辦法在Java中禁用隱式NTLM身份驗證?這對我來說是一個糟糕的陷阱。
嗨,感謝您*非常*快速回復。我只是測試了設置 - 不幸的是它不能解決我的問題。不過,非常感謝!我想我需要用Apache -.-中的HttpClient替換URLConnection。我想解決這個問題,因爲目前的解決方案非常快速而且很髒:)感謝您的努力! –