ZF2记录卷曲请求
我需要捕获应用程序在执行过程中产生的所有curl请求,并将它们显示在ZF Developer Tools工具栏的新选项卡中。
我为ZF Developer Toolbar创建了一个收集器,但现在不知道如何捕获应用程序在执行过程中所做的所有curl请求并记录它们。
经过一番研究后,我认为对于所有curl请求(某些第三方库的fe请求)都没有一个通用的解决方案。 如果我错了,请告诉我。
正如你所提到的,你可以编写自己的连接器/服务来记录你自己的请求。
您还可以使用tcpdump等工具将所有应用程序的传出流量记录到文件中,并在DevToolbar中显示此文件的内容。 这不仅限于卷曲请求,这可能对你更好。
您可以捕获zf2应用程序在执行过程中所做的所有curl请求,并使用CURLOPT_VERBOSE记录它们,并使用CURLOPT_WRITEHEADER或curl_getinfo()将其写入一个日志文件中,然后将其读取到ZF Developer Toolbar上,以这种方式显示它。
准备具有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 ZendHttpClientAdapterCurl();
$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);
}
解释:
在此之后,您可以使用zend文件读取器或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的手册页获取更多细节。
要么
您可以在apache之外的服务器上使用tcpdump工具来跟踪所有网络流量,例如:
$ tcpdump -vv -s0 tcp port 80 -w /tmp/apache_outgoing.pcap
阅读tcpdump的手册页获取更多细节。
如果您正在使用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中它应该是相似的。
链接地址: http://www.djcxy.com/p/93891.html