Быстрый фон.
CFHTTP не поддерживает проверку подлинности Windows NTLM / Authenticate, только базовую проверку подлинности.Мне нужно сделать http-запросы, которые должны будут проходить аутентификацию в NTLM, поэтому я закончил кататься своей собственной версией CFHTTP.
Я нашел Статья Терри Райана , в которой используется версия apache httpclient3.1 выполнить дайджест-проверку подлинности и использовать ее с использованием версии 4.1.2, которая включает в себя функциональность NTLM.
У меня есть функция, которая выполнит запрос get, а затем другие функции для обработки возврата структуры, которая выглядит какНабор результатов cfhttp.Внесенные мной изменения основаны на учебном примере .
public any function httpRequest(url,username,password,domain) {
var httpClient = createObject("java","org.apache.http.impl.client.DefaultHttpClient");
var authScope = createObject("java","org.apache.http.auth.AuthScope");
var httpCredentials = createObject("java","org.apache.http.auth.NTCredentials");
var httpGet = createObject("java","org.apache.http.client.methods.HttpGet");
var jURL = createObject("java", "java.net.URL").init(arguments.url);
var host = jURL.getHost();
var path = jURL.getPath();
var httpHostTarget = createObject("java","org.apache.http.HttpHost").init(host,80,"http");
var localContext = createObject("java","org.apache.http.protocol.BasicHttpContext");
var httpContent = {};
var response = '';
if (len(arguments.username) and len(arguments.password) gt 0){
httpCredentials.init(arguments.Username, arguments.password, cgi.remote_host,arguments.domain);
httpClient.getCredentialsProvider().setCredentials(authScope.ANY, httpCredentials);
}
if (!Len(path)) path = "/";
httpGet.init(path);
response = httpClient.execute(httpHostTarget, httpget, localContext);
httpContent = convertHttpClientResponseToCFHTTPFormat(response);
httpClient.getConnectionManager().shutdown();
return httpContent;
}
Это работало нормально, пока я не изменил функцию для выполнения аутентификации.
К сожалению, сейчас я получаю:
Метод execute не найден.
Либо не существует методов с указанным именем метода и типом аргумента, либоМетод execute перегружен типами аргументов, которые ColdFusion не может надежно расшифровать.ColdFusion обнаружил 2 метода, которые соответствуют предоставленным аргументам.Если это объект Java, и вы убедились, что метод существует, используйте функцию javacast, чтобы уменьшить неоднозначность.
Насколько я могу судить, в HttpClient есть только одна совпадающая функция execute () дляклассы объектов перешли к нему, поэтому я немного растерялся.JavaCast не позволяет вам приводить сложные объекты или супертипы, чтобы это не работало.
Кто-нибудь может подсказать, как я могу заставить это работать?Как я могу уменьшить двусмысленность?