ntlm — Время ожидания шлюза — MS Navision

У меня есть интеграция с Microsoft Navision. Необходимо получать / отправлять данные оттуда, но в настоящее время возникают проблемы с подключением к службам через PHP. Вот что я попробовал:

<?php
require_once("NTLM/NTLMStream.php");
require_once("NTLM/NTLMSoapClient.php");
stream_wrapper_unregister('http');
stream_wrapper_register('http', 'NTLMStream') or die("Failed to register protocol");
$servicesURL = 'http://{IP}:{PORT}/TEST/WS/Services';
$baseURL = 'http://{IP}:{PORT}/TEST/WS/';
$CompanyName = "Company Name";
$pageURL = $baseURL.rawurlencode($CompanyName).'/Page/PolicyList';
echo "<br>URL of Item page: $pageURL<br><br>";
try{
$service = new NTLMSoapClient($pageURL);
var_dump($service);
}
catch (Exception $e) {
echo "<hr><b>ERROR: SoapException:</b> [".$e."]<hr>";
echo "<pre>".htmlentities(print_r($service->__getLastRequest(),1)).</pre>";
}
stream_wrapper_restore('http');
?>

Дело в том, что ссылки на сервисы работают в браузере, но я не могу получить к ним доступ / подключиться через PHP. Я получаю следующую ошибку:

**Gateway Timeout**
The gateway did not receive a timely response from the upstream server or application.

PHP Fatal error: SOAP-ERROR: Parsing WSDL: Couldn't load from
'http://{IP}:{PORT}/TEST/WS/{Company Name}/Page/PolicyList' : Start tag expected,
'<' not found

NTLM включен в CustomSettings.config файл:

<add key="ServicesUseNTLMAuthentication" value="true" />

Я также добавил IP-адрес сервера и данные аутентификации (имя пользователя: пароль) в запросе:

class NTLMSoapClient extends SoapClient {
function __doRequest($request, $location, $action, $version, $one_way = 0) {
$headers = array(
'Method: POST',
'Connection: Keep-Alive',
'User-Agent: PHP-SOAP-CURL',
'Content-Type: text/xml; charset=utf-8',
'SOAPAction: "'.$action.'"',
);
$this->__last_request_headers = $headers;
$ch = curl_init($location);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
//curl_setopt($ch, CURLOPT_POST, true );
//curl_setopt($ch, CURLOPT_POSTFIELDS, $request);
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_NTLM);
curl_setopt($ch, CURLOPT_USERPWD, 'username:password');
curl_setopt($ch, CURLOPT_INTERFACE, '{server IP which was whitelisted}');
$response = curl_exec($ch);
return $response;
}

function __getLastRequestHeaders() {
return implode("\n", $this->__last_request_headers)."\n";
}
}

Я проверил сотни примеров, статей, следил за тем, что они делают, но все еще не могу получить никаких результатов от сервисов. Я проверил также следующий ответ, также YouTube видео — делаю точно так же, но не везет.

Я что-то не так делаю?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]