PHP не мой домашний ресурс, но я нахожу регистрацию / трассировку запросов и ответов с SoapClient
действительно низким.
Требование: протоколировать запросы и ответы на уровне HTTP, включая все заголовки HTTP, то есть «необработанные» сообщения HTTP.
Как перехватить HTTP-запрос PHP-клиента мыла? предлагает расширить SoapClient
и переопределить __doRequest
.Я собрал нечто подобное, как показано ниже.В настоящее время происходит сбой с
Uncaught SoapFault exception: [Client] SoapClient::__doRequest() returned non string value
Мне нужно разобраться с этим, но основная проблема заключается в том, что он перехватывает сообщения на уровне приложения, а не на уровне HTTP.Следовательно, нет доступа к заголовкам HTTP, например, AFAICS.
Как я могу перейти ниже уровня приложения?В идеале у меня был бы способ сказать (измененный) SoapClient
, чтобы выгрузить все HTTP-сообщения в файл X.
LoggingSoapClient
class LoggingSoapClient extends SoapClient
{
public function __construct($wsdl, array $options = null)
{
if (is_null($options)) {
$options = array();
}
$options['trace'] = 1;
parent::__construct($wsdl, $options);
}
public function __doRequest($request, $location, $action, $version, $one_way = 0)
{
write_log($location);
write_log($action);
write_log($request);
parent::__doRequest($request, $location, $action, $version, $one_way);
$soap_response = parent::__getLastResponse();
write_log($soap_response);
}
}