ZF2 log curl запросы

Мне нужно перехватить все запросы curl, которые приложение выполняет во время выполнения, и отобразить их на новой вкладке на панели инструментов ZF Developer Tools.

Я создал коллектор для панели инструментов ZF Developer, но теперь не знаю, как перехватывать все запросы curl, которые приложение выполняет во время выполнения, и регистрировать их.

7 голосов | спросил Ivo 1 22016vEurope/Moscow11bEurope/MoscowTue, 01 Nov 2016 10:28:01 +0300 2016, 10:28:01

3 ответа


0

После некоторых исследований я не думаю, что есть общее решение для всех запросов curl (например, запросов от какой-либо сторонней библиотеки). Пожалуйста, поправьте меня, если я ошибаюсь.

Как вы упомянули, вы можете написать свой собственный коннектор /сервис, который регистрирует ваши собственные запросы.

Вы также можете регистрировать весь исходящий трафик из вашего приложения с помощью инструмента, такого как tcpdump, в файл, отображающий содержимое этого файла на DevToolbar. Это не будет ограничиваться только запросами curl, что может быть лучше для вас.

ответил Nico M 1 22016vEurope/Moscow11bEurope/MoscowTue, 01 Nov 2016 19:02:24 +0300 2016, 19:02:24
0

Вы можете перехватить все запросы curl, которые приложение zf2 делает во время выполнения, и зарегистрировать их, используя CURLOPT_VERBOSE и записав их в один файл журнала, используя CURLOPT_WRITEHEADER или curl_getinfo (), и прочитать их, чтобы показать их на панели инструментов разработчика ZF следующим образом. .

Подготовьте запрос скручивания с параметрами CURLOPT_VERBOSE и CURLOPT_WRITEHEADER, как показано ниже.

function curl_request($url, $log_file_path) {

    //1. Prepare log file to append request details in to this log file
    $logfile_fp = fopen($log_file_path, "a+"); 

    //2. Prepare curl request to having CURLOPT_VERBOSE and CURLOPT_WRITEHEADER parameters in it
    $request = new Request();
    $request->setUri($url);
    $request->setMethod('POST');
    $client = new Client();
    $adapter = new \Zend\Http\Client\Adapter\Curl();
    $client->setAdapter($adapter);
    $adapter->setOptions(array(
        'curloptions' => array(
        CURLOPT_POST => 1,
        CURLOPT_POSTFIELDS => $data,
        CURLOPT_RETURNTRANSFER => 1,
        CURLOPT_VERBOSE => 1, 
        CURLOPT_WRITEHEADER => $logfile_fp,
        // Your curl request options here...
        // Your curl request options here...
        // Your curl request options here...
        // Your curl request options here...
        // Your curl request options here...
        )
    ));
    //3. Execute curl request
    $response = $client->dispatch($request);

    //4. Get curl request info
    $handle = $client->getAdapter()->getHandle();
    $request_info = curl_getinfo($handle);

    //5. Write curl request info into log file
    @fwrite($logfile_fp, implode(",", $request_info);
    @fclose($logfile_fp);
}

Объяснение:

  1. Подготовьте файл журнала, чтобы добавить детали запроса в этот файл журнала.
  2. Подготовьте запрос curl, чтобы в нем были параметры CURLOPT_VERBOSE и CURLOPT_WRITEHEADER.
  3. Выполнить запрос curl.
  4. Получить информацию о запросе curl с помощью curl_getinfo ().
  5. Запишите информацию о запросе скручивания в файл журнала

После этого вы можете прочитать файл журнала, используя Zend File Reader или Fread (), чтобы показать его на панели инструментов разработчика.

ИЛИ

Кроме этого, существуют альтернативные обходные пути сторонних производителей, которые отслеживают трафик вашего сервера с помощью netstat, tcpdump или wireshark, как показано ниже.

Вы можете использовать netstat. Например:

$ netstat -nputw
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 192.168.2.48:60614      151.101.65.69:80        ESTABLISHED 2527/chrome     
tcp        0      0 192.168.2.48:58317      198.252.206.25:443      ESTABLISHED 2527/chrome     

Прочтите справочную страницу netstat для получения дополнительной информации.

ИЛИ

Вы можете использовать инструмент tcpdump на сервере вне вашего apache для отслеживания всего сетевого трафика, например:

$ tcpdump -vv -s0 tcp port 80 -w /tmp/apache_outgoing.pcap

Прочтите справочную страницу tcpdump для получения дополнительной информации.

ответил himeshc_IB 3 42016vEurope/Moscow11bEurope/MoscowThu, 03 Nov 2016 14:37:03 +0300 2016, 14:37:03
0

Если вы используете Zend_Http_Client, вы можете выйти из класса CURL-Adapter и перезаписать метод write, где вы можете записать вызов до вызова метода write его родительского класса.

Может быть что-то вроде этого (черновик):

<?php
$adapter = new MY_Zend_Http_Client_Adapter_Curl();
$client = new Zend_Http_Client();
$client->setAdapter($adapter);
$client->request();

class MY_Zend_Http_Client_Adapter_Curl {
    public function write()
    {
        // do the logging
        parent.write();
    }
}

В Zend 2 это должно быть похоже.

ответил Aykut Çevik 9 32016vEurope/Moscow11bEurope/MoscowWed, 09 Nov 2016 15:27:06 +0300 2016, 15:27:06

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132