Php – debuggingcurl
我希望在发送请求之前查看请求中的post字段。 (为了debugging目的)。
我正在使用的PHP库(类)已经(不是由我),所以我试图了解它。
据我所知,它使用curl_setopt()
设置不同的选项,如标题等,然后它使用curl_exec()
发送请求。
想法如何看到什么职位领域正在发送?
您可以启用CURLOPT_VERBOSE
选项:
curl_setopt($curlhandle, CURLOPT_VERBOSE, true);
当CURLOPT_VERBOSE
被设置时,输出被写入STDERR或使用CURLOPT_STDERR
指定的文件。 输出是非常丰富的。
您也可以使用tcpdump或wireshark观看networkingstream量。
您可以启用CURLOPT_VERBOSE
选项并将该信息logging到(临时) CURLOPT_STDERR
:
// CURLOPT_VERBOSE: TRUE to output verbose information. Writes output to STDERR, // or the file specified using CURLOPT_STDERR. curl_setopt($handle, CURLOPT_VERBOSE, true); $verbose = fopen('php://temp', 'w+'); curl_setopt($handle, CURLOPT_STDERR, $verbose);
你可以在curl完成请求后阅读它:
$result = curl_exec($handle); if ($result === FALSE) { printf("cUrl error (#%d): %s<br>\n", curl_errno($handle), htmlspecialchars(curl_error($handle))); } rewind($verbose); $verboseLog = stream_get_contents($verbose); echo "Verbose information:\n<pre>", htmlspecialchars($verboseLog), "</pre>\n";
(我原来的回答类似,但在相关的问题上更加延伸 。)
更多关于最后一个请求的度量信息可以通过curl_getinfo
。 这些信息也可以用于debuggingcurl请求。 一个用法示例,我通常会将其包装到一个函数中:
$version = curl_version(); extract(curl_getinfo($handle)); $metrics = <<<EOD URL....: $url Code...: $http_code ($redirect_count redirect(s) in $redirect_time secs) Content: $content_type Size: $download_content_length (Own: $size_download) Filetime: $filetime Time...: $total_time Start @ $starttransfer_time (DNS: $namelookup_time Connect: $connect_time Request: $pretransfer_time) Speed..: Down: $speed_download (avg.) Up: $speed_upload (avg.) Curl...: v{$version['version']} EOD;
这是一个简单的代码相同:
curl_setopt($ch, CURLOPT_VERBOSE, 1); curl_setopt($ch, CURLOPT_STDERR, $fp);
其中$ fp是输出错误的文件句柄。 例如:
$fp = fopen(dirname(__FILE__).'/errorlog.txt', 'w');
这是一个更简单的方法,直接写入php错误输出
curl_setopt($curl, CURLOPT_VERBOSE, true); curl_setopt($curl, CURLOPT_STDERR, fopen('php://stderr', 'w'));
要获取CURL请求的信息,请执行以下操作:
$response = curl_exec($ch); $info = curl_getinfo($ch); var_dump($info);