Я пытаюсь создать двустороннюю интеграцию Slack с локальной конечной точкой Microsoft TFS REST, используя Node.js и PHP в качестве основных процессоров обработки данных. Я могу успешно выполнить GET для предварительной установки TFS с использованием аутентификации NTLM и проанализировать данные до Slack. Итак, я знаю, что (1) конечная точка работает, (2) я способна к ней аутентифицироваться, и (3) я могу получить данные из нее без проблем.
Когда я беру точку блокировки, я пытаюсь отправить запрос в конечную точку TFS и получить успешный ответ. Я генерирую запрос POST в PHP, и когда он выполняется на небезопасном веб-сайте, тело POST и заголовки проходят через него очень хорошо. Однако, когда я изменяю URL-адрес этого запроса POST на конечную точку TFS, защищенную слоем NTLM, я получаю сообщение об ошибке, в котором говорится, что тип содержимого недопустим (TFS требует «application / json», а запрос, который он получает, не имеет По умолчанию используется заголовок application / x-www-form-urlencoded).
Похоже, что тело запроса и заголовки почему-то не передаются после шага аутентификации NTLM, но я не знаю, почему это произойдет, и как гарантировать, что он будет проходить. Я проверил некоторые советы и хитрости онлайн, но пока не смог прорваться.
Вот последняя версия PHP-кода, который я использую:
$ch = curl_init();
curl_setopt($ch, CURLINFO_HEADER_OUT, TRUE);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
//curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_RETURNTRANSFER,TRUE);
curl_setopt($ch, CURLOPT_HEADER, TRUE);
curl_setopt($ch, CURLOPT_URL,$baseURL);
curl_setopt($ch, CURLOPT_UNRESTRICTED_AUTH, TRUE);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($ch, CURLOPT_POSTREDIR,3);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_NTLM);
curl_setopt($ch, CURLOPT_USERPWD, $userpwd);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postBody);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Accept: application/json',
'Transfer-Encoding: chunked',
'x-metadata: testing',
'x-testing: This is a value'
));
Любые идеи о том, как обеспечить, чтобы тело POST и заголовки HTTP пережили путешествие через слой NTLM?
Задача ещё не решена.
Других решений пока нет …