Перехватить запрос / ответ PHP SoapClient на уровне HTTP для ведения журнала - PullRequest
0 голосов
/ 18 ноября 2018

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);
  }
}
...