2.4.6. Работа с Web-сервисами¶
Для обмена данными по протоколу HTTP(S) в системе Global предлагается использовать COM-объект WinHTTP, который входит в стандартную поставку ОС Windows.
<pascal soap_service_url, soap_service_function https_cert_subject, service_login, service_password, xml>
HttpReq := CreateOleObject('WinHttp.WinHttpRequest.5.1');
HttpReq.Open('POST', soap_service_url, false);
HttpReq.SetClientCertificate(https_cert_subject);
HttpReq.setRequestHeader('Accept', 'text/xml;charset=UTF-8');
HttpReq.SetRequestHeader('SOAPAction', 'urn:' + soap_service_function);
HttpReq.SetCredentials(service_login, service_password, 0);
HttpReq.Send(xml);
Result := HttpReq.ResponseBody; //Возвращает массив байт - ответ сервера в оригинальной кодировке.
</pascal>
2.4.6.1. ЧаВО¶
Q: Метод Post генерирует ошибку с сообщением: Ошибка поддержки безопасных каналов
A: Клиентский сертификат (переданный в метод SetClientCertificate) не принят сервером
Q: Метод Post генерирует ошибку с сообщением: Недопустимый или неправильный центр сертификации
A: Возникает при использовании протокола https. Сервер предоставил невалидный сертификат - изданный сертификационным центром к которому нет доверия. Доверие к сертификационному центру определяется наличием его сертификата в хранилище сертификатов “Доверенные корневые центры сертификации”.
Q: Как сделать центр сертификации доверенным
A: Если у вас есть сертификат изданный интересующим центром - открыть этот сертификат и найти на вкладке “Путь сертификации” сертификат сертификационного центра (верхний узел в дереве сертификатов). Двойным кликом по этому узлу можно открыть сам сертификат и воспользоваться экспортом в соответствующее хранилище.
Q: Если необходимо управлять сертификатами более чем на одной машине в рамках корпоративной сети - можно ли автоматизировать процесс?
A: Можно эту функцию возложить на домен. Лучше поручить квалифицированному специалисту (системному администратору). Краткая инструкция от Microsoft.
Q: Метод Post генерирует ошибку с сообщением: Имя узла в сертификате недопустимо либо не соответствует
A: Сертификат предоставляемый сервером по протоколу HTTPS должен быть выдан на его доменное имя, в противном случае вы получите выше указанную ошибку. Это не ошибка клиента - ошибка держателя ресурса, либо ресурс не является подлинным (за ним стоит злоумышленник).